From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=40.107.82.105; helo=nam01-sn1-obe.outbound.protection.outlook.com; envelope-from=mike.li@bayhubtech.com; receiver=edk2-devel@lists.01.org Received: from NAM01-SN1-obe.outbound.protection.outlook.com (mail-eopbgr820105.outbound.protection.outlook.com [40.107.82.105]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id AA3DD211B158C for ; Wed, 23 Jan 2019 02:45:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=towerbridgetechnology.onmicrosoft.com; s=selector1-bayhubtech-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=iO3Kiddep+zhwuF1o2/FVGEHBmOID13B/3BlkAIClAs=; b=XxMKxhL9VqMf1xJZjq+H9NcgH6lkyYxCSwq+BH4dlVPNvtXL1q8KUCsxmId7eJS8gu1vBnMVLhoFG9ymUtOV51jY89rl8s/W+MqISPhjiPRJuhUGXgGQoZL+vLS6v199n+ojVzeK8q1bqGX/faHC5rdU1bsdbJK+YTIqNLfRCwk= Received: from MWHPR16MB1679.namprd16.prod.outlook.com (10.172.59.149) by MWHPR16MB1646.namprd16.prod.outlook.com (10.172.59.140) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1537.31; Wed, 23 Jan 2019 10:45:14 +0000 Received: from MWHPR16MB1679.namprd16.prod.outlook.com ([fe80::151:66e0:7431:2f5d]) by MWHPR16MB1679.namprd16.prod.outlook.com ([fe80::151:66e0:7431:2f5d%10]) with mapi id 15.20.1558.016; Wed, 23 Jan 2019 10:45:14 +0000 From: "Mike Li (WH)" To: "Mike Li (WH)" , "Xiaoguang Yu (WH)" , "Ernest Zhang(WH)" , "Andy Dai (WH)" CC: "Shirley Her (SC)" , "edk2-devel@lists.01.org" Thread-Topic: [edk2] [patch_3] make EDK Driver Support BH720+EMMC chip Thread-Index: AQHUswi4nDZWe7eto0mqypTHSOycYA== Date: Wed, 23 Jan 2019 10:45:14 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-AU, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [218.106.122.62] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; MWHPR16MB1646; 6:nOGf20VMthkRSm4W+Q3wGX7/qdnjxOHETm2XsOd+oEfR2xwdM/LbE5kJ2HzTEwJ8pSt15rG0WY1uN4C46213gtU3vk7li9eCYB9DLuVB90FunlEval6rXeEtPWAUGT5YAZwmsB3e3ojLU3fXqb0odqkPCssyGQImGEywx4gJGKibgPBL6fMyqdoAEaAWrRx/M5Ld/iG69t2246ZOh4S1sg6gs9YjisA8cDytqWJT8ft/3PkPg0ZV5my1t8IN9vTkE0QlwF5LOUnpY0pGyBNnJ3iAhNrz+htNtYI1J4WjpMkEFN+6I/a7ZazfE3wVuIkHPCotZZp7g72pMQP9gqWaKkJRwwzd0AdI65TaY7jJasR5iMP4K3YZzsei09ocaOaltH6QcPfH+hHn22TID8jtWOATN247p3k3bLwkhgZZqt2Blq0bo8GOvgqfyqh+Qtye5hWKoTEZKZl1YooDsZ7qSQ==; 5:eqen+GLvR8K2m9sA43zrGtZKBLPSX8qw7liJi0TluMkHR6e4yUGtCklCMdyv3f2jzS4Cw2jz4a0a66GvZHDJu9LbnR584S8r2zrbDIb3ntDHdDQw9JfYdHqyIiEyYV1NCXWP5KoS6Tr3t72NOfsP38Mq4LphYmjSk7YBDGAnL8CHZWSAifXmWRJCmJ9C1lkKlMNKeDH5gaCVVx8oBPW39Q==; 7:bJHJ/8+lGB1LzNV7iaJdwDPs9E2QOe/LIP/wc1eea6gk7RGAzVnUo4qAhRJ79z5qOlsjiwp7QT9WSfbZLMUgba0xkSJmTV0uJmD3uiVMB11W4EBj95u5Tvb2fU1j9YLCtUqWEnhbv728XIj53sSINg== x-ms-office365-filtering-correlation-id: a2d468a9-cacf-406e-04ab-08d6811fdb97 x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(7021145)(8989299)(5600110)(711020)(4605077)(4534185)(7022145)(4603075)(4627221)(201702281549075)(8990200)(2017052603328)(7153060)(7193020); SRVR:MWHPR16MB1646; x-ms-traffictypediagnostic: MWHPR16MB1646: authentication-results: spf=none (sender IP is ) smtp.mailfrom=mike.li@bayhubtech.com; x-microsoft-antispam-prvs: x-forefront-prvs: 0926B0E013 x-forefront-antispam-report: SFV:NSPM; SFS:(10019020)(136003)(346002)(366004)(396003)(39830400003)(376002)(199004)(189003)(486006)(229853002)(2906002)(476003)(9686003)(446003)(11346002)(6436002)(26005)(55016002)(102836004)(6506007)(53546011)(86362001)(186003)(7696005)(14444005)(256004)(6636002)(76176011)(14454004)(53946003)(478600001)(54896002)(30864003)(6306002)(6246003)(790700001)(53936002)(6116002)(3846002)(93156006)(97736004)(71190400001)(4744004)(71200400001)(81166006)(81156014)(8936002)(8676002)(4326008)(25786009)(19627235002)(7736002)(105586002)(54906003)(66066001)(110136005)(106356001)(2940100002)(99286004)(68736007)(74316002)(316002)(33656002)(579004)(569006); DIR:OUT; SFP:1102; SCL:1; SRVR:MWHPR16MB1646; H:MWHPR16MB1679.namprd16.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: bayhubtech.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: WBkmLYi5L5W5QZ5muEvPQYKc2FXGoVwHppV3GjfGx/x5/jlZj7y5Yg/K+dt1G4NR6N1cCMkiS+tLdIKm5NUq8XQlZdvul0hiGUnorYWPopZoh+URMSXVvb+pX39dKvGhFO77HoRAtkTGbxKMgiXvyx7NskM+TmtpUs1budgT+mC4Z1ZqAQBoQBDHLtVtrd5RiJkofWPiEBXeWJd7P7hoCqAEjZN/O6oCFj3wKKEGKbTwY5bAIFUXZI1QRfQacV4hC5kbUIUITtKgUgiFakRpROu20Sje4fm4xdzkouluHJ+pCbc1GpYAULYwprDh7c3f1gs7HL/A1AmKwlpe8XZJyRcRACekf5o+pS1Vh5H+hJ3v9JiQCPdknC+MpfddOiq8CU3dY1uPDizadVKWVpY+bhEUqmX+uJwLFlagMNO0AAI= MIME-Version: 1.0 X-OriginatorOrg: bayhubtech.com X-MS-Exchange-CrossTenant-Network-Message-Id: a2d468a9-cacf-406e-04ab-08d6811fdb97 X-MS-Exchange-CrossTenant-originalarrivaltime: 23 Jan 2019 10:45:14.5208 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 0a7aae2b-8f2e-44df-ba2f-42de7f93c642 X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR16MB1646 X-Content-Filtered-By: Mailman/MimeDel 2.1.29 Subject: Re: [patch_3] make EDK Driver Support BH720+EMMC chip X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 23 Jan 2019 10:45:20 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:45:20 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:45:20 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:45:20 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:45:20 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:45:20 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:45:20 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:45:20 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:45:20 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:45:20 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:45:20 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:45:20 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:45:20 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:45:20 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:45:20 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:45:20 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:45:20 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:45:20 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:45:20 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:45:20 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:45:20 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:45:20 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:45:20 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:45:20 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:45:20 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:45:20 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:45:20 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:45:20 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:45:20 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:45:20 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:45:20 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:45:20 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:45:20 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:45:20 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:45:20 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:45:20 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:45:20 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:45:20 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:45:20 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:45:20 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:45:20 -0000 Content-Language: en-US Content-Type: text/plain; charset="gb2312" Content-Transfer-Encoding: base64 SGksIGFsbA0KVGhlIGZvbGxvd2luZyBtb2RpZmljYXRpb25zIGFyZSBtYWRlIHRvIGVuYWJsZSBF REsgRHJpdmVyIFN1cHBvcnQgQkg3MjAgQ0hJUC4NCg0KLS0tIC9jL3l4L2VkazIvTWRlTW9kdWxl UGtnL0J1cy9QY2kvU2RNbWNQY2lIY0R4ZS9TZERldmljZS5jICAgMjAxOS0wMS0yMSAxNTozNjox Mi4xODg3MzQ0MDAgLTA4MDANCisrKyAvYy9NeVdvcmtzcGFjZS9lZGsyLXZVREsyMDE4L01kZU1v ZHVsZVBrZy9CdXMvUGNpL1NkTW1jUGNpSGNEeGUvU2REZXZpY2UuYyAgIDIwMTgtMDgtMTMgMjI6 NDA6MDQuODAyMjI2MjAwIC0wNzAwDQpAQCAtMSw3ICsxLDYgQEANCi8qKiBAZmlsZQ0KICAgVGhp cyBmaWxlIHByb3ZpZGVzIHNvbWUgaGVscGVyIGZ1bmN0aW9ucyB3aGljaCBhcmUgc3BlY2lmaWMg Zm9yIFNEIGNhcmQgZGV2aWNlLg0KLSAgQ29weXJpZ2h0IChjKSAyMDE4LCBOVklESUEgQ09SUE9S QVRJT04uIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQogICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2 LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQogICBUaGlzIHBy b2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQogICBhcmUgbGljZW5zZWQgYW5k IG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgQlNE IExpY2Vuc2UNCkBAIC0zMTksOSArMzE4LDExNiBAQCBTZENhcmRTZXRSY2EgKA0KICAgcmV0dXJu IFN0YXR1czsNCn0NCisvKioNCisgIFNlbmQgY29tbWFuZCBTRU5EX0NTRCB0byB0aGUgU0QgZGV2 aWNlIHRvIGdldCB0aGUgZGF0YSBvZiB0aGUgQ1NEIHJlZ2lzdGVyLg0KKw0KKyAgUmVmZXIgdG8g U0QgUGh5c2ljYWwgTGF5ZXIgU2ltcGxpZmllZCBTcGVjIDQuMSBTZWN0aW9uIDQuNyBmb3IgZGV0 YWlscy4NCisNCisgIEBwYXJhbVtpbl0gIFBhc3NUaHJ1ICAgICAgQSBwb2ludGVyIHRvIHRoZSBF RklfU0RfTU1DX1BBU1NfVEhSVV9QUk9UT0NPTCBpbnN0YW5jZS4NCisgIEBwYXJhbVtpbl0gIFNs b3QgICAgICAgICAgVGhlIHNsb3QgbnVtYmVyIG9mIHRoZSBTRCBjYXJkIHRvIHNlbmQgdGhlIGNv bW1hbmQgdG8uDQorICBAcGFyYW1baW5dICBSY2EgICAgICAgICAgIFRoZSByZWxhdGl2ZSBkZXZp Y2UgYWRkcmVzcyBvZiBzZWxlY3RlZCBkZXZpY2UuDQorICBAcGFyYW1bb3V0XSBDc2QgICAgICAg ICAgIFRoZSBidWZmZXIgdG8gc3RvcmUgdGhlIGNvbnRlbnQgb2YgdGhlIENTRCByZWdpc3Rlci4N CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm90ZSB0aGUgY2FsbGVyIHNob3VsZCBpZ25v cmUgdGhlIGxvd2VzdCBieXRlIG9mIHRoaXMNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg YnVmZmVyIGFzIHRoZSBjb250ZW50IG9mIHRoaXMgYnl0ZSBpcyBtZWFuaW5nbGVzcyBldmVuDQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRoZSBvcGVyYXRpb24gc3VjY2VlZHMuDQor DQorICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgIFRoZSBvcGVyYXRpb24gaXMgZG9uZSBjb3Jy ZWN0bHkuDQorICBAcmV0dmFsIE90aGVycyAgICAgICAgICAgIFRoZSBvcGVyYXRpb24gZmFpbHMu DQorDQorKiovDQorRUZJX1NUQVRVUw0KK1NkQ2FyZEdldENzZCAoDQorICBJTiAgICAgRUZJX1NE X01NQ19QQVNTX1RIUlVfUFJPVE9DT0wgICpQYXNzVGhydSwNCisgIElOICAgICBVSU5UOCAgICAg ICAgICAgICAgICAgICAgICAgICAgU2xvdCwNCisgIElOICAgICBVSU5UMTYgICAgICAgICAgICAg ICAgICAgICAgICAgUmNhLA0KKyAgICAgT1VUIFNEX0NTRCAgICAgICAgICAgICAgICAgICAgICAg ICAqQ3NkDQorICApDQorew0KKyAgRUZJX1NEX01NQ19DT01NQU5EX0JMT0NLICAgICAgICAgICAg ICBTZE1tY0NtZEJsazsNCisgIEVGSV9TRF9NTUNfU1RBVFVTX0JMT0NLICAgICAgICAgICAgICAg U2RNbWNTdGF0dXNCbGs7DQorICBFRklfU0RfTU1DX1BBU1NfVEhSVV9DT01NQU5EX1BBQ0tFVCAg IFBhY2tldDsNCisgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVz Ow0KKw0KKyAgWmVyb01lbSAoJlNkTW1jQ21kQmxrLCBzaXplb2YgKFNkTW1jQ21kQmxrKSk7DQor ICBaZXJvTWVtICgmU2RNbWNTdGF0dXNCbGssIHNpemVvZiAoU2RNbWNTdGF0dXNCbGspKTsNCisg IFplcm9NZW0gKCZQYWNrZXQsIHNpemVvZiAoUGFja2V0KSk7DQorICBQYWNrZXQuU2RNbWNDbWRC bGsgICAgPSAmU2RNbWNDbWRCbGs7DQorICBQYWNrZXQuU2RNbWNTdGF0dXNCbGsgPSAmU2RNbWNT dGF0dXNCbGs7DQorICBQYWNrZXQuVGltZW91dCAgICAgICAgPSBTRF9NTUNfSENfR0VORVJJQ19U SU1FT1VUOw0KKyAgU2RNbWNDbWRCbGsuQ29tbWFuZEluZGV4ID0gU0RfU0VORF9DU0Q7DQorICBT ZE1tY0NtZEJsay5Db21tYW5kVHlwZSAgPSBTZE1tY0NvbW1hbmRUeXBlQWM7DQorICBTZE1tY0Nt ZEJsay5SZXNwb25zZVR5cGUgPSBTZE1tY1Jlc3BvbnNlVHlwZVIyOw0KKyAgU2RNbWNDbWRCbGsu Q29tbWFuZEFyZ3VtZW50ID0gKFVJTlQzMilSY2EgPDwgMTY7DQorICBTdGF0dXMgPSBTZE1tY1Bh c3NUaHJ1UGFzc1RocnUgKFBhc3NUaHJ1LCBTbG90LCAmUGFja2V0LCBOVUxMKTsNCisgIGlmICgh RUZJX0VSUk9SIChTdGF0dXMpKSB7DQorICAgIC8vDQorICAgIC8vIEZvciBkZXRhaWxzLCByZWZl ciB0byBTRCBIb3N0IENvbnRyb2xsZXIgU2ltcGxpZmllZCBTcGVjIDMuMCBUYWJsZSAyLTEyLg0K KyAgICAvLw0KKyAgICBDb3B5TWVtICgoKFVJTlQ4KilDc2QpICsgMSwgJlNkTW1jU3RhdHVzQmxr LlJlc3AwLCBzaXplb2YgKFNEX0NTRCkgLSAxKTsNCisgIH0NCisNCisgIHJldHVybiBTdGF0dXM7 DQorfQ0KKw0KKy8qKg0KKyAgU2VuZCBjb21tYW5kIFNFTkRfQ1NEIHRvIHRoZSBTRCBkZXZpY2Ug dG8gZ2V0IHRoZSBkYXRhIG9mIHRoZSBDU0QgcmVnaXN0ZXIuDQorDQorICBSZWZlciB0byBTRCBQ aHlzaWNhbCBMYXllciBTaW1wbGlmaWVkIFNwZWMgNC4xIFNlY3Rpb24gNC43IGZvciBkZXRhaWxz Lg0KKw0KKyAgQHBhcmFtW2luXSAgUGFzc1RocnUgICAgICBBIHBvaW50ZXIgdG8gdGhlIEVGSV9T RF9NTUNfUEFTU19USFJVX1BST1RPQ09MIGluc3RhbmNlLg0KKyAgQHBhcmFtW2luXSAgU2xvdCAg ICAgICAgICBUaGUgc2xvdCBudW1iZXIgb2YgdGhlIFNEIGNhcmQgdG8gc2VuZCB0aGUgY29tbWFu ZCB0by4NCisgIEBwYXJhbVtpbl0gIFJjYSAgICAgICAgICAgVGhlIHJlbGF0aXZlIGRldmljZSBh ZGRyZXNzIG9mIHNlbGVjdGVkIGRldmljZS4NCisgIEBwYXJhbVtvdXRdIFNjciAgICAgICAgICAg VGhlIGJ1ZmZlciB0byBzdG9yZSB0aGUgY29udGVudCBvZiB0aGUgU0NSIHJlZ2lzdGVyLg0KKw0K KyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICBUaGUgb3BlcmF0aW9uIGlzIGRvbmUgY29ycmVj dGx5Lg0KKyAgQHJldHZhbCBPdGhlcnMgICAgICAgICAgICBUaGUgb3BlcmF0aW9uIGZhaWxzLg0K Kw0KKyoqLw0KK0VGSV9TVEFUVVMNCitTZENhcmRHZXRTY3IgKA0KKyAgSU4gICAgIEVGSV9TRF9N TUNfUEFTU19USFJVX1BST1RPQ09MICAqUGFzc1RocnUsDQorICBJTiAgICAgVUlOVDggICAgICAg ICAgICAgICAgICAgICAgICAgIFNsb3QsDQorICBJTiAgICAgVUlOVDE2ICAgICAgICAgICAgICAg ICAgICAgICAgIFJjYSwNCisgICAgIE9VVCBTRF9TQ1IgICAgICAgICAgICAgICAgICAgICAgICAg KlNjcg0KKyAgKQ0KK3sNCisgIEVGSV9TRF9NTUNfQ09NTUFORF9CTE9DSyAgICAgICAgICAgICAg U2RNbWNDbWRCbGs7DQorICBFRklfU0RfTU1DX1NUQVRVU19CTE9DSyAgICAgICAgICAgICAgIFNk TW1jU3RhdHVzQmxrOw0KKyAgRUZJX1NEX01NQ19QQVNTX1RIUlVfQ09NTUFORF9QQUNLRVQgICBQ YWNrZXQ7DQorICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1czsN CisNCisgIFplcm9NZW0gKCZTZE1tY0NtZEJsaywgc2l6ZW9mIChTZE1tY0NtZEJsaykpOw0KKyAg WmVyb01lbSAoJlNkTW1jU3RhdHVzQmxrLCBzaXplb2YgKFNkTW1jU3RhdHVzQmxrKSk7DQorICBa ZXJvTWVtICgmUGFja2V0LCBzaXplb2YgKFBhY2tldCkpOw0KKw0KKyAgUGFja2V0LlNkTW1jQ21k QmxrICAgID0gJlNkTW1jQ21kQmxrOw0KKyAgUGFja2V0LlNkTW1jU3RhdHVzQmxrID0gJlNkTW1j U3RhdHVzQmxrOw0KKyAgUGFja2V0LlRpbWVvdXQgICAgICAgID0gU0RfTU1DX0hDX0dFTkVSSUNf VElNRU9VVDsNCisNCisgIFNkTW1jQ21kQmxrLkNvbW1hbmRJbmRleCA9IFNEX0FQUF9DTUQ7DQor ICBTZE1tY0NtZEJsay5Db21tYW5kVHlwZSAgPSBTZE1tY0NvbW1hbmRUeXBlQWM7DQorICBTZE1t Y0NtZEJsay5SZXNwb25zZVR5cGUgPSBTZE1tY1Jlc3BvbnNlVHlwZVIxOw0KKyAgU2RNbWNDbWRC bGsuQ29tbWFuZEFyZ3VtZW50ID0gKFVJTlQzMilSY2EgPDwgMTY7DQorDQorICBTdGF0dXMgPSBT ZE1tY1Bhc3NUaHJ1UGFzc1RocnUgKFBhc3NUaHJ1LCBTbG90LCAmUGFja2V0LCBOVUxMKTsNCisg IGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCisgICAgcmV0dXJuIFN0YXR1czsNCisgIH0NCisN CisgIFNkTW1jQ21kQmxrLkNvbW1hbmRJbmRleCA9IFNEX1NFTkRfU0NSOw0KKyAgU2RNbWNDbWRC bGsuQ29tbWFuZFR5cGUgID0gU2RNbWNDb21tYW5kVHlwZUFkdGM7DQorICBTZE1tY0NtZEJsay5S ZXNwb25zZVR5cGUgPSBTZE1tY1Jlc3BvbnNlVHlwZVIxOw0KKw0KKyAgUGFja2V0LkluRGF0YUJ1 ZmZlciAgICAgPSBTY3I7DQorICBQYWNrZXQuSW5UcmFuc2Zlckxlbmd0aCA9IHNpemVvZiAoU0Rf U0NSKTsNCisNCisgIFN0YXR1cyA9IFNkTW1jUGFzc1RocnVQYXNzVGhydSAoUGFzc1RocnUsIFNs b3QsICZQYWNrZXQsIE5VTEwpOw0KKw0KKyAgcmV0dXJuIFN0YXR1czsNCit9DQogLyoqDQogICBT ZW5kIGNvbW1hbmQgU0VMRUNUX0RFU0VMRUNUX0NBUkQgdG8gdGhlIFNEIGRldmljZSB0byBzZWxl Y3QvZGVzZWxlY3QgaXQuDQpAQCAtNzg1LDggKzg5MSw4IEBAIFNkQ2FyZFNldEJ1c01vZGUgKA0K ICAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICBCdXNXaWR0aDsNCiAgIFVJTlQ4ICAgICAg ICAgICAgICAgICAgICAgICAgQWNjZXNzTW9kZTsNCiAgIFVJTlQ4ICAgICAgICAgICAgICAgICAg ICAgICAgSG9zdEN0cmwxOw0KKyAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICBIb3N0Q3Ry bDI7DQogICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgIFN3aXRjaFJlc3BbNjRdOw0KLSAg U0RfTU1DX0JVU19NT0RFICAgICAgICAgICAgICBUaW1pbmc7DQogICBTRF9NTUNfSENfUFJJVkFU RV9EQVRBICAgICAgICpQcml2YXRlOw0KICAgUHJpdmF0ZSA9IFNEX01NQ19IQ19QUklWQVRFX0ZS T01fVEhJUyAoUGFzc1RocnUpOw0KQEAgLTgxOCwyMyArOTI0LDE4IEBAIFNkQ2FyZFNldEJ1c01v ZGUgKA0KICAgaWYgKFMxOEEgJiYgKENhcGFiaWxpdHktPlNkcjEwNCAhPSAwKSAmJiAoKFN3aXRj aFJlc3BbMTNdICYgQklUMykgIT0gMCkpIHsNCiAgICAgQ2xvY2tGcmVxID0gMjA4Ow0KICAgICBB Y2Nlc3NNb2RlID0gMzsNCi0gICAgVGltaW5nID0gU2RNbWNVaHNTZHIxMDQ7DQogICB9IGVsc2Ug aWYgKFMxOEEgJiYgKENhcGFiaWxpdHktPlNkcjUwICE9IDApICYmICgoU3dpdGNoUmVzcFsxM10g JiBCSVQyKSAhPSAwKSkgew0KICAgICBDbG9ja0ZyZXEgPSAxMDA7DQogICAgIEFjY2Vzc01vZGUg PSAyOw0KLSAgICBUaW1pbmcgPSBTZE1tY1Voc1NkcjUwOw0KICAgfSBlbHNlIGlmIChTMThBICYm IChDYXBhYmlsaXR5LT5EZHI1MCAhPSAwKSAmJiAoKFN3aXRjaFJlc3BbMTNdICYgQklUNCkgIT0g MCkpIHsNCiAgICAgQ2xvY2tGcmVxID0gNTA7DQogICAgIEFjY2Vzc01vZGUgPSA0Ow0KLSAgICBU aW1pbmcgPSBTZE1tY1Voc0RkcjUwOw0KICAgfSBlbHNlIGlmICgoU3dpdGNoUmVzcFsxM10gJiBC SVQxKSAhPSAwKSB7DQogICAgIENsb2NrRnJlcSA9IDUwOw0KICAgICBBY2Nlc3NNb2RlID0gMTsN Ci0gICAgVGltaW5nID0gU2RNbWNVaHNTZHIyNTsNCiAgIH0gZWxzZSB7DQogICAgIENsb2NrRnJl cSA9IDI1Ow0KICAgICBBY2Nlc3NNb2RlID0gMDsNCi0gICAgVGltaW5nID0gU2RNbWNVaHNTZHIx MjsNCiAgIH0NCiAgIFN0YXR1cyA9IFNkQ2FyZFN3aXRjaCAoUGFzc1RocnUsIFNsb3QsIEFjY2Vz c01vZGUsIDB4RiwgMHhGLCAweEYsIFRSVUUsIFN3aXRjaFJlc3ApOw0KQEAgLTg2MCwzMiArOTYx LDIwIEBAIFNkQ2FyZFNldEJ1c01vZGUgKA0KICAgICB9DQogICB9DQotICBTdGF0dXMgPSBTZE1t Y0hjVWhzU2lnbmFsaW5nIChQcml2YXRlLT5Db250cm9sbGVySGFuZGxlLCBQY2lJbywgU2xvdCwg VGltaW5nKTsNCisgIEhvc3RDdHJsMiA9IChVSU5UOCl+MHg3Ow0KKyAgU3RhdHVzID0gU2RNbWNI Y0FuZE1taW8gKFBjaUlvLCBTbG90LCBTRF9NTUNfSENfSE9TVF9DVFJMMiwgc2l6ZW9mIChIb3N0 Q3RybDIpLCAmSG9zdEN0cmwyKTsNCiAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCiAgICAg cmV0dXJuIFN0YXR1czsNCiAgIH0NCi0NCi0gIFN0YXR1cyA9IFNkTW1jSGNDbG9ja1N1cHBseSAo UGNpSW8sIFNsb3QsIENsb2NrRnJlcSAqIDEwMDAsIFByaXZhdGUtPkJhc2VDbGtGcmVxW1Nsb3Rd LCBQcml2YXRlLT5Db250cm9sbGVyVmVyc2lvbltTbG90XSk7DQorICBIb3N0Q3RybDIgPSBBY2Nl c3NNb2RlOw0KKyAgU3RhdHVzID0gU2RNbWNIY09yTW1pbyAoUGNpSW8sIFNsb3QsIFNEX01NQ19I Q19IT1NUX0NUUkwyLCBzaXplb2YgKEhvc3RDdHJsMiksICZIb3N0Q3RybDIpOw0KICAgaWYgKEVG SV9FUlJPUiAoU3RhdHVzKSkgew0KICAgICByZXR1cm4gU3RhdHVzOw0KICAgfQ0KLSAgaWYgKG1P dmVycmlkZSAhPSBOVUxMICYmIG1PdmVycmlkZS0+Tm90aWZ5UGhhc2UgIT0gTlVMTCkgew0KLSAg ICBTdGF0dXMgPSBtT3ZlcnJpZGUtPk5vdGlmeVBoYXNlICgNCi0gICAgICAgICAgICAgICAgICAg ICAgICAgIFByaXZhdGUtPkNvbnRyb2xsZXJIYW5kbGUsDQotICAgICAgICAgICAgICAgICAgICAg ICAgICBTbG90LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgRWRraWlTZE1tY1N3aXRjaENs b2NrRnJlcVBvc3QsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAmVGltaW5nDQotICAgICAg ICAgICAgICAgICAgICAgICAgICApOw0KLSAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQot ICAgICAgREVCVUcgKCgNCi0gICAgICAgIERFQlVHX0VSUk9SLA0KLSAgICAgICAgIiVhOiBTRC9N TUMgc3dpdGNoIGNsb2NrIGZyZXEgcG9zdCBub3RpZmllciBjYWxsYmFjayBmYWlsZWQgLSAlclxu IiwNCi0gICAgICAgIF9fRlVOQ1RJT05fXywNCi0gICAgICAgIFN0YXR1cw0KLSAgICAgICAgKSk7 DQotICAgICAgcmV0dXJuIFN0YXR1czsNCi0gICAgfQ0KKyAgU3RhdHVzID0gU2RNbWNIY0Nsb2Nr U3VwcGx5IChQY2lJbywgU2xvdCwgQ2xvY2tGcmVxICogMTAwMCwgKkNhcGFiaWxpdHkpOw0KKyAg aWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICByZXR1cm4gU3RhdHVzOw0KICAgfQ0KICAg aWYgKChBY2Nlc3NNb2RlID09IDMpIHx8ICgoQWNjZXNzTW9kZSA9PSAyKSAmJiAoQ2FwYWJpbGl0 eS0+VHVuaW5nU0RSNTAgIT0gMCkpKSB7DQpAQCAtOTk2LDEwICsxMDg1LDkgQEAgU2RDYXJkSWRl bnRpZmljYXRpb24gKA0KICAgICByZXR1cm4gU3RhdHVzOw0KICAgfQ0KLSAgaWYgKCgoQ29udHJv bGxlclZlciAmIDB4RkYpID49IFNEX01NQ19IQ19DVFJMX1ZFUl8zMDApICYmDQotICAgICAgKChD b250cm9sbGVyVmVyICYgMHhGRikgPD0gU0RfTU1DX0hDX0NUUkxfVkVSXzQyMCkpIHsNCisgIGlm ICgoKENvbnRyb2xsZXJWZXIgJiAweEZGKSA9PSAyKSB8fCAoKENvbnRyb2xsZXJWZXIgJiAweEZG KSA9PSAzKSkgew0KICAgICBTMThyID0gVFJVRTsNCi0gIH0gZWxzZSBpZiAoKChDb250cm9sbGVy VmVyICYgMHhGRikgPT0gU0RfTU1DX0hDX0NUUkxfVkVSXzEwMCkgfHwgKChDb250cm9sbGVyVmVy ICYgMHhGRikgPT0gU0RfTU1DX0hDX0NUUkxfVkVSXzIwMCkpIHsNCisgIH0gZWxzZSBpZiAoKChD b250cm9sbGVyVmVyICYgMHhGRikgPT0gMCkgfHwgKChDb250cm9sbGVyVmVyICYgMHhGRikgPT0g MSkpIHsNCiAgICAgUzE4ciA9IEZBTFNFOw0KICAgfSBlbHNlIHsNCiAgICAgQVNTRVJUIChGQUxT RSk7DQpAQCAtMTA2NSw3ICsxMTUzLDcgQEAgU2RDYXJkSWRlbnRpZmljYXRpb24gKA0KICAgICAg ICAgZ290byBFcnJvcjsNCiAgICAgICB9DQotICAgICAgU2RNbWNIY0luaXRDbG9ja0ZyZXEgKFBj aUlvLCBTbG90LCBQcml2YXRlLT5CYXNlQ2xrRnJlcVtTbG90XSwgUHJpdmF0ZS0+Q29udHJvbGxl clZlcnNpb25bU2xvdF0pOw0KKyAgICAgIFNkTW1jSGNJbml0Q2xvY2tGcmVxIChQY2lJbywgU2xv dCwgUHJpdmF0ZS0+Q2FwYWJpbGl0eVtTbG90XSk7DQogICAgICAgZ0JTLT5TdGFsbCAoMTAwMCk7 DQoNCnBsZWFzZSBjaGVjayBpdCENCkJyLA0KTWlrZQ0KDQpGcm9tOiBNaWtlIExpIChXSCkNClNl bnQ6IDIwMTnE6jHUwjIzyNUgMTg6MzkNClRvOiBNaWtlIExpIChXSCk7IFhpYW9ndWFuZyBZdSAo V0gpOyBFcm5lc3QgWmhhbmcoV0gpOyBBbmR5IERhaSAoV0gpDQpDYzogU2hpcmxleSBIZXIgKFND KTsgZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmcNClN1YmplY3Q6IFJFOiBbZWRrMl0gW3BhdGNoXzJd IG1ha2UgRURLIERyaXZlciBTdXBwb3J0IEJINzIwK0VNTUMgY2hpcA0KDQpIaSwgYWxsDQoNClRo ZSBmb2xsb3dpbmcgbW9kaWZpY2F0aW9ucyBhcmUgbWFkZSB0byBlbmFibGUgRURLIERyaXZlciBT dXBwb3J0IEJINzIwIENISVAuDQoNCi0tLSAvYy95eC9lZGsyL01kZU1vZHVsZVBrZy9CdXMvUGNp L1NkTW1jUGNpSGNEeGUvRW1tY0RldmljZS5jICAgICAgICAgICAgMjAxOS0wMS0yMSAxNTozNjox Mi4xODY3Mzk2MDAgLTA4MDANCisrKyAvYy9NeVdvcmtzcGFjZS9lZGsyLXZVREsyMDE4L01kZU1v ZHVsZVBrZy9CdXMvUGNpL1NkTW1jUGNpSGNEeGUvRW1tY0RldmljZS5jICAgICAgICAgICAyMDE5 LTAxLTEwIDE0OjM0OjIzLjA3MjUzODkwMCAtMDgwMA0KQEAgLTEsNyArMSw2IEBADQovKiogQGZp bGUNCiAgIFRoaXMgZmlsZSBwcm92aWRlcyBzb21lIGhlbHBlciBmdW5jdGlvbnMgd2hpY2ggYXJl IHNwZWNpZmljIGZvciBFTU1DIGRldmljZS4NCg0KLSAgQ29weXJpZ2h0IChjKSAyMDE4LCBOVklE SUEgQ09SUE9SQVRJT04uIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQogICBDb3B5cmlnaHQgKGMpIDIw MTUgLSAyMDE2LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQog ICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQogICBhcmUgbGlj ZW5zZWQgYW5kIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBv ZiB0aGUgQlNEIExpY2Vuc2UNCkBAIC01MjcsMTcgKzUyNiwzNSBAQCBFbW1jVHVuaW5nQ2xrRm9y SHMyMDAgKA0KICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KICAgICByZXR1cm4gU3RhdHVz Ow0KICAgfQ0KKw0KKyAgaWYoQmh0SG9zdFBjaVN1cHBvcnQoUGNpSW8pKXsNCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvL3NldCBkYXRhIHRyYW5zZmVyIHdpdGggNGJpdA0KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1cyA9IFNkTW1jSGNTZXRCdXNXaWR0aCAoUGNp SW8sIFNsb3QsIDQpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vZW5hYmxlIGhh cmR3YXJlIHR1bmluZw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvc3RDdHJsMiA9 ICh+MHgxMCk7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzID0gU2RNbWNI Y0FuZE1taW8gKFBjaUlvLCBTbG90LCAweDExMCxzaXplb2YgKEhvc3RDdHJsMiksICZIb3N0Q3Ry bDIpOw0KKw0KKyAgICAgICAgICAgICAgICBTdGF0dXMgPSBFbW1jU2VuZFR1bmluZ0JsayAoUGFz c1RocnUsIFNsb3QsIDQpOw0KKyAgICAgICAgICAgICAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMp KSB7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREVCVUcgKChERUJVR19FUlJPUiwg IkVtbWNUdW5pbmdDbGtGb3JIczIwMDogU2VuZCB0dW5pbmcgYmxvY2sgZmFpbHMgd2l0aCAlclxu IiwgU3RhdHVzKSk7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0YXR1 czsNCisgICAgICAgICAgICAgICAgfQ0KKw0KKyAgfQ0KICAgLy8NCiAgIC8vIEFzayB0aGUgZGV2 aWNlIHRvIHNlbmQgYSBzZXF1ZW5jZSBvZiB0dW5pbmcgYmxvY2tzIHRpbGwgdGhlIHR1bmluZyBw cm9jZWR1cmUgaXMgZG9uZS4NCiAgIC8vDQogICBSZXRyeSA9IDA7DQogICBkbyB7DQotICAgIFN0 YXR1cyA9IEVtbWNTZW5kVHVuaW5nQmxrIChQYXNzVGhydSwgU2xvdCwgQnVzV2lkdGgpOw0KLSAg ICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQotICAgICAgREVCVUcgKChERUJVR19FUlJPUiwg IkVtbWNUdW5pbmdDbGtGb3JIczIwMDogU2VuZCB0dW5pbmcgYmxvY2sgZmFpbHMgd2l0aCAlclxu IiwgU3RhdHVzKSk7DQotICAgICAgcmV0dXJuIFN0YXR1czsNCi0gICAgfQ0KLQ0KKyAgICAgICAg ICAgICAgaWYoIUJodEhvc3RQY2lTdXBwb3J0KFBjaUlvKSl7DQorICAgICAgICAgICAgICAgICAg U3RhdHVzID0gRW1tY1NlbmRUdW5pbmdCbGsgKFBhc3NUaHJ1LCBTbG90LCBCdXNXaWR0aCk7DQor ICAgICAgICAgICAgICAgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICAgICAgICAg ICAgICAgICAgREVCVUcgKChERUJVR19FUlJPUiwgIkVtbWNUdW5pbmdDbGtGb3JIczIwMDogU2Vu ZCB0dW5pbmcgYmxvY2sgZmFpbHMgd2l0aCAlclxuIiwgU3RhdHVzKSk7DQorICAgICAgICAgICAg ICAgICAgICByZXR1cm4gU3RhdHVzOw0KKyAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAg ICAgIH0gZWxzZSB7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ0JTLT5TdGFsbCg1 MDAwKTsNCisgICAgICAgICAgICAgIH0NCiAgICAgU3RhdHVzID0gU2RNbWNIY1J3TW1pbyAoUGNp SW8sIFNsb3QsIFNEX01NQ19IQ19IT1NUX0NUUkwyLCBUUlVFLCBzaXplb2YgKEhvc3RDdHJsMiks ICZIb3N0Q3RybDIpOw0KICAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQogICAgICAgcmV0 dXJuIFN0YXR1czsNCkBAIC01NDgsNiArNTY1LDEwIEBAIEVtbWNUdW5pbmdDbGtGb3JIczIwMCAo DQogICAgIH0NCg0KICAgICBpZiAoKEhvc3RDdHJsMiAmIChCSVQ2IHwgQklUNykpID09IEJJVDcp IHsNCisgICAgICAgICAgICAgICAgaWYoQmh0SG9zdFBjaVN1cHBvcnQoUGNpSW8pKXsNCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvL3NldCBkYXRhIHRyYW5zZmVyIHdpdGggZGVmYXVs dA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1cyA9IFNkTW1jSGNTZXRCdXNX aWR0aCAoUGNpSW8sIFNsb3QsIEJ1c1dpZHRoKTsNCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB9DQogICAgICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KICAgICB9DQogICB9IHdoaWxlICgr K1JldHJ5IDwgNDApOw0KQEAgLTY1Miw3ICs2NzMsNiBAQCBFbW1jU3dpdGNoQnVzV2lkdGggKA0K ICAgQHBhcmFtW2luXSBTbG90ICAgICAgICAgICBUaGUgc2xvdCBudW1iZXIgb2YgdGhlIFNEIGNh cmQgdG8gc2VuZCB0aGUgY29tbWFuZCB0by4NCiAgIEBwYXJhbVtpbl0gUmNhICAgICAgICAgICAg VGhlIHJlbGF0aXZlIGRldmljZSBhZGRyZXNzIHRvIGJlIGFzc2lnbmVkLg0KICAgQHBhcmFtW2lu XSBIc1RpbWluZyAgICAgICBUaGUgdmFsdWUgdG8gYmUgd3JpdHRlbiB0byBIU19USU1JTkcgZmll bGQgb2YgRVhUX0NTRCByZWdpc3Rlci4NCi0gIEBwYXJhbVtpbl0gVGltaW5nICAgICAgICAgVGhl IGJ1cyBtb2RlIHRpbWluZyBpbmRpY2F0b3IuDQogICBAcGFyYW1baW5dIENsb2NrRnJlcSAgICAg IFRoZSBtYXggY2xvY2sgZnJlcXVlbmN5IHRvIGJlIHNldCwgdGhlIHVuaXQgaXMgTUh6Lg0KDQog ICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgIFRoZSBvcGVyYXRpb24gaXMgZG9uZSBjb3JyZWN0 bHkuDQpAQCAtNjY2LDcgKzY4Niw2IEBAIEVtbWNTd2l0Y2hDbG9ja0ZyZXEgKA0KICAgSU4gVUlO VDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTbG90LA0KICAgSU4gVUlOVDE2ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBSY2EsDQogICBJTiBVSU5UOCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEhzVGltaW5nLA0KLSAgSU4gU0RfTU1DX0JVU19NT0RFICAgICAgICAgICAg ICAgICAgICBUaW1pbmcsDQogICBJTiBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAg IENsb2NrRnJlcQ0KICAgKQ0Kew0KQEAgLTcwOCwyOCArNzI3LDcgQEAgRW1tY1N3aXRjaENsb2Nr RnJlcSAoDQogICAvLw0KICAgLy8gQ29udmVydCB0aGUgY2xvY2sgZnJlcSB1bml0IGZyb20gTUh6 IHRvIEtIei4NCiAgIC8vDQotICBTdGF0dXMgPSBTZE1tY0hjQ2xvY2tTdXBwbHkgKFBjaUlvLCBT bG90LCBDbG9ja0ZyZXEgKiAxMDAwLCBQcml2YXRlLT5CYXNlQ2xrRnJlcVtTbG90XSwgUHJpdmF0 ZS0+Q29udHJvbGxlclZlcnNpb25bU2xvdF0pOw0KLSAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkg ew0KLSAgICByZXR1cm4gU3RhdHVzOw0KLSAgfQ0KLQ0KLSAgaWYgKG1PdmVycmlkZSAhPSBOVUxM ICYmIG1PdmVycmlkZS0+Tm90aWZ5UGhhc2UgIT0gTlVMTCkgew0KLSAgICBTdGF0dXMgPSBtT3Zl cnJpZGUtPk5vdGlmeVBoYXNlICgNCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFByaXZhdGUt PkNvbnRyb2xsZXJIYW5kbGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICBTbG90LA0KLSAg ICAgICAgICAgICAgICAgICAgICAgICAgRWRraWlTZE1tY1N3aXRjaENsb2NrRnJlcVBvc3QsDQot ICAgICAgICAgICAgICAgICAgICAgICAgICAmVGltaW5nDQotICAgICAgICAgICAgICAgICAgICAg ICAgICApOw0KLSAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQotICAgICAgREVCVUcgKCgN Ci0gICAgICAgIERFQlVHX0VSUk9SLA0KLSAgICAgICAgIiVhOiBTRC9NTUMgc3dpdGNoIGNsb2Nr IGZyZXEgcG9zdCBub3RpZmllciBjYWxsYmFjayBmYWlsZWQgLSAlclxuIiwNCi0gICAgICAgIF9f RlVOQ1RJT05fXywNCi0gICAgICAgIFN0YXR1cw0KLSAgICAgICAgKSk7DQotICAgICAgcmV0dXJu IFN0YXR1czsNCi0gICAgfQ0KLSAgfQ0KKyAgU3RhdHVzID0gU2RNbWNIY0Nsb2NrU3VwcGx5IChQ Y2lJbywgU2xvdCwgQ2xvY2tGcmVxICogMTAwMCwgUHJpdmF0ZS0+Q2FwYWJpbGl0eVtTbG90XSk7 DQoNCiAgIHJldHVybiBTdGF0dXM7DQp9DQpAQCAtNzY0LDEzICs3NjIsMTAgQEAgRW1tY1N3aXRj aFRvSGlnaFNwZWVkICgNCiAgIElOIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg QnVzV2lkdGgNCiAgICkNCnsNCi0gIEVGSV9TVEFUVVMgICAgICAgICAgICAgIFN0YXR1czsNCi0g IFVJTlQ4ICAgICAgICAgICAgICAgICAgIEhzVGltaW5nOw0KLSAgVUlOVDggICAgICAgICAgICAg ICAgICAgSG9zdEN0cmwxOw0KLSAgU0RfTU1DX0JVU19NT0RFICAgICAgICAgVGltaW5nOw0KLSAg U0RfTU1DX0hDX1BSSVZBVEVfREFUQSAgKlByaXZhdGU7DQotDQotICBQcml2YXRlID0gU0RfTU1D X0hDX1BSSVZBVEVfRlJPTV9USElTIChQYXNzVGhydSk7DQorICBFRklfU1RBVFVTICAgICAgICAg IFN0YXR1czsNCisgIFVJTlQ4ICAgICAgICAgICAgICAgSHNUaW1pbmc7DQorICBVSU5UOCAgICAg ICAgICAgICAgIEhvc3RDdHJsMTsNCisgIFVJTlQ4ICAgICAgICAgICAgICAgSG9zdEN0cmwyOw0K DQogICBTdGF0dXMgPSBFbW1jU3dpdGNoQnVzV2lkdGggKFBjaUlvLCBQYXNzVGhydSwgU2xvdCwg UmNhLCBJc0RkciwgQnVzV2lkdGgpOw0KICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KQEAg LTc4NSwyMSArNzgwLDMxIEBAIEVtbWNTd2l0Y2hUb0hpZ2hTcGVlZCAoDQogICAgIHJldHVybiBT dGF0dXM7DQogICB9DQoNCisgIC8vDQorICAvLyBDbGVhbiBVSFMgTW9kZSBTZWxlY3QgZmllbGQg b2YgSG9zdCBDb250cm9sIDIgcmVpZ3N0ZXIgYmVmb3JlIHVwZGF0ZQ0KKyAgLy8NCisgIEhvc3RD dHJsMiA9IChVSU5UOCl+MHg3Ow0KKyAgU3RhdHVzID0gU2RNbWNIY0FuZE1taW8gKFBjaUlvLCBT bG90LCBTRF9NTUNfSENfSE9TVF9DVFJMMiwgc2l6ZW9mIChIb3N0Q3RybDIpLCAmSG9zdEN0cmwy KTsNCisgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCisgICAgcmV0dXJuIFN0YXR1czsNCisg IH0NCisgIC8vDQorICAvLyBTZXQgVUhTIE1vZGUgU2VsZWN0IGZpZWxkIG9mIEhvc3QgQ29udHJv bCAyIHJlaWdzdGVyIHRvIFNEUjEyLzI1LzUwDQorICAvLw0KICAgaWYgKElzRGRyKSB7DQotICAg IFRpbWluZyA9IFNkTW1jTW1jSHNEZHI7DQorICAgIEhvc3RDdHJsMiA9IEJJVDI7DQogICB9IGVs c2UgaWYgKENsb2NrRnJlcSA9PSA1Mikgew0KLSAgICBUaW1pbmcgPSBTZE1tY01tY0hzU2RyOw0K KyAgICBIb3N0Q3RybDIgPSBCSVQwOw0KICAgfSBlbHNlIHsNCi0gICAgVGltaW5nID0gU2RNbWNN bWNMZWdhY3k7DQorICAgIEhvc3RDdHJsMiA9IDA7DQogICB9DQotDQotICBTdGF0dXMgPSBTZE1t Y0hjVWhzU2lnbmFsaW5nIChQcml2YXRlLT5Db250cm9sbGVySGFuZGxlLCBQY2lJbywgU2xvdCwg VGltaW5nKTsNCisgIFN0YXR1cyA9IFNkTW1jSGNPck1taW8gKFBjaUlvLCBTbG90LCBTRF9NTUNf SENfSE9TVF9DVFJMMiwgc2l6ZW9mIChIb3N0Q3RybDIpLCAmSG9zdEN0cmwyKTsNCiAgIGlmIChF RklfRVJST1IgKFN0YXR1cykpIHsNCiAgICAgcmV0dXJuIFN0YXR1czsNCiAgIH0NCg0KICAgSHNU aW1pbmcgPSAxOw0KLSAgU3RhdHVzID0gRW1tY1N3aXRjaENsb2NrRnJlcSAoUGNpSW8sIFBhc3NU aHJ1LCBTbG90LCBSY2EsIEhzVGltaW5nLCBUaW1pbmcsIENsb2NrRnJlcSk7DQorICBTdGF0dXMg PSBFbW1jU3dpdGNoQ2xvY2tGcmVxIChQY2lJbywgUGFzc1RocnUsIFNsb3QsIFJjYSwgSHNUaW1p bmcsIENsb2NrRnJlcSk7DQoNCiAgIHJldHVybiBTdGF0dXM7DQp9DQpAQCAtODMxLDEzICs4MzYs MTAgQEAgRW1tY1N3aXRjaFRvSFMyMDAgKA0KICAgSU4gVUlOVDggICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBCdXNXaWR0aA0KICAgKQ0Kew0KLSAgRUZJX1NUQVRVUyAgICAgICAgICAgICAg IFN0YXR1czsNCi0gIFVJTlQ4ICAgICAgICAgICAgICAgICAgICBIc1RpbWluZzsNCi0gIFVJTlQx NiAgICAgICAgICAgICAgICAgICBDbG9ja0N0cmw7DQotICBTRF9NTUNfQlVTX01PREUgICAgICAg ICAgVGltaW5nOw0KLSAgU0RfTU1DX0hDX1BSSVZBVEVfREFUQSAgKlByaXZhdGU7DQotDQotICBQ cml2YXRlID0gU0RfTU1DX0hDX1BSSVZBVEVfRlJPTV9USElTIChQYXNzVGhydSk7DQorICBFRklf U1RBVFVTICAgICAgICAgIFN0YXR1czsNCisgIFVJTlQ4ICAgICAgICAgICAgICAgSHNUaW1pbmc7 DQorICBVSU5UOCAgICAgICAgICAgICAgIEhvc3RDdHJsMjsNCisgIFVJTlQxNiAgICAgICAgICAg ICAgQ2xvY2tDdHJsOw0KDQogICBpZiAoKEJ1c1dpZHRoICE9IDQpICYmIChCdXNXaWR0aCAhPSA4 KSkgew0KICAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KQEAgLTg1NywyOSArODU5 LDYwIEBAIEVtbWNTd2l0Y2hUb0hTMjAwICgNCiAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsN CiAgICAgcmV0dXJuIFN0YXR1czsNCiAgIH0NCi0NCi0gIFRpbWluZyA9IFNkTW1jTW1jSHMyMDA7 DQotDQotICBTdGF0dXMgPSBTZE1tY0hjVWhzU2lnbmFsaW5nIChQcml2YXRlLT5Db250cm9sbGVy SGFuZGxlLCBQY2lJbywgU2xvdCwgVGltaW5nKTsNCisgIC8vDQorICAvLyBDbGVhbiBVSFMgTW9k ZSBTZWxlY3QgZmllbGQgb2YgSG9zdCBDb250cm9sIDIgcmVpZ3N0ZXIgYmVmb3JlIHVwZGF0ZQ0K KyAgLy8NCisgIEhvc3RDdHJsMiA9IChVSU5UOCl+MHg3Ow0KKyAgU3RhdHVzID0gU2RNbWNIY0Fu ZE1taW8gKFBjaUlvLCBTbG90LCBTRF9NTUNfSENfSE9TVF9DVFJMMiwgc2l6ZW9mIChIb3N0Q3Ry bDIpLCAmSG9zdEN0cmwyKTsNCisgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCisgICAgcmV0 dXJuIFN0YXR1czsNCisgIH0NCisgIC8vDQorICAvLyBTZXQgVUhTIE1vZGUgU2VsZWN0IGZpZWxk IG9mIEhvc3QgQ29udHJvbCAyIHJlaWdzdGVyIHRvIFNEUjEwNA0KKyAgLy8NCisgIEhvc3RDdHJs MiA9IEJJVDAgfCBCSVQxOw0KKyAgU3RhdHVzID0gU2RNbWNIY09yTW1pbyAoUGNpSW8sIFNsb3Qs IFNEX01NQ19IQ19IT1NUX0NUUkwyLCBzaXplb2YgKEhvc3RDdHJsMiksICZIb3N0Q3RybDIpOw0K ICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KICAgICByZXR1cm4gU3RhdHVzOw0KICAgfQ0K LQ0KICAgLy8NCiAgIC8vIFdhaXQgSW50ZXJuYWwgQ2xvY2sgU3RhYmxlIGluIHRoZSBDbG9jayBD b250cm9sIHJlZ2lzdGVyIHRvIGJlIDEgYmVmb3JlIHNldCBTRCBDbG9jayBFbmFibGUgYml0DQog ICAvLw0KLSAgU3RhdHVzID0gU2RNbWNIY1dhaXRNbWlvU2V0ICgNCi0gICAgICAgICAgICAgUGNp SW8sDQotICAgICAgICAgICAgIFNsb3QsDQotICAgICAgICAgICAgIFNEX01NQ19IQ19DTE9DS19D VFJMLA0KLSAgICAgICAgICAgICBzaXplb2YgKENsb2NrQ3RybCksDQotICAgICAgICAgICAgIEJJ VDEsDQotICAgICAgICAgICAgIEJJVDEsDQotICAgICAgICAgICAgIFNEX01NQ19IQ19HRU5FUklD X1RJTUVPVVQNCisgIGlmIChCaHRIb3N0UGNpU3VwcG9ydChQY2lJbykpIHsNCisgICAgICAgICAg ICAgICAgICBTdGF0dXMgPSBTZE1tY0hjV2FpdE1taW9TZXQgKA0KKyAgICAgICAgICAgICAgIFBj aUlvLA0KKyAgICAgICAgICAgICAgIFNsb3QsDQorICAgICAgICAgICAgICAgMHgxY2MsDQorICAg ICAgICAgICAgICAgc2l6ZW9mIChDbG9ja0N0cmwpLA0KKyAgICAgICAgICAgICAgIEJJVDE0LA0K KyAgICAgICAgICAgICAgIEJJVDE0LA0KKyAgICAgICAgICAgICAgIFNEX01NQ19IQ19HRU5FUklD X1RJTUVPVVQNCisgICAgICAgICAgICAgKTsNCisgIH0NCisgIGVsc2Ugew0KKyAgICBTdGF0dXMg PSBTZE1tY0hjV2FpdE1taW9TZXQgKA0KKyAgICAgICAgICAgICAgIFBjaUlvLA0KKyAgICAgICAg ICAgICAgIFNsb3QsDQorICAgICAgICAgICAgICAgU0RfTU1DX0hDX0NMT0NLX0NUUkwsDQorICAg ICAgICAgICAgICAgc2l6ZW9mIChDbG9ja0N0cmwpLA0KKyAgICAgICAgICAgICAgIEJJVDEsDQor ICAgICAgICAgICAgICAgQklUMSwNCisgICAgICAgICAgICAgICBTRF9NTUNfSENfR0VORVJJQ19U SU1FT1VUDQogICAgICAgICAgICAgICk7DQorICB9DQogICBpZiAoRUZJX0VSUk9SIChTdGF0dXMp KSB7DQogICAgIHJldHVybiBTdGF0dXM7DQogICB9DQorDQorICBpZiAoQmh0SG9zdFBjaVN1cHBv cnQoUGNpSW8pKXsNCisgICAgLy9XYWl0IDJuZCBDYXJkIERldGVjdCBkZWJvdW5jZSBGaW5pc2hl ZCBieSB3YWl0IHR3aWNlIG9mIGRlYm91bmNlIG1heCB0aW1lDQorICAgIFVJTlQzMiB2YWx1ZTMy Ow0KKyAgICB3aGlsZSAoMSkgew0KKyAgICAgICAgICAgICAgICBTdGF0dXMgPSBTZE1tY0hjUndN bWlvIChQY2lJbywgU2xvdCwgU0RfTU1DX0hDX1BSRVNFTlRfU1RBVEUsIFRSVUUsIHNpemVvZih2 YWx1ZTMyKSwgJnZhbHVlMzIpOw0KKyAgICAgICAgICAgICAgICBpZiAoKCh2YWx1ZTMyID4+IDE4 KSAmIDB4MDEpID09ICgodmFsdWUzMiA+PiAxNikgJiAweDAxKSkNCisgICAgICAgICAgICAgICAg ICBicmVhazsNCisgICAgfQ0KKyAgfQ0KICAgLy8NCiAgIC8vIFNldCBTRCBDbG9jayBFbmFibGUg aW4gdGhlIENsb2NrIENvbnRyb2wgcmVnaXN0ZXIgdG8gMQ0KICAgLy8NCkBAIC04ODcsMTIgKzky MCwzMyBAQCBFbW1jU3dpdGNoVG9IUzIwMCAoDQogICBTdGF0dXMgPSBTZE1tY0hjT3JNbWlvIChQ Y2lJbywgU2xvdCwgU0RfTU1DX0hDX0NMT0NLX0NUUkwsIHNpemVvZiAoQ2xvY2tDdHJsKSwgJkNs b2NrQ3RybCk7DQoNCiAgIEhzVGltaW5nID0gMjsNCi0gIFN0YXR1cyA9IEVtbWNTd2l0Y2hDbG9j a0ZyZXEgKFBjaUlvLCBQYXNzVGhydSwgU2xvdCwgUmNhLCBIc1RpbWluZywgVGltaW5nLCBDbG9j a0ZyZXEpOw0KKyAgU3RhdHVzID0gRW1tY1N3aXRjaENsb2NrRnJlcSAoUGNpSW8sIFBhc3NUaHJ1 LCBTbG90LCBSY2EsIEhzVGltaW5nLCBDbG9ja0ZyZXEpOw0KICAgaWYgKEVGSV9FUlJPUiAoU3Rh dHVzKSkgew0KICAgICByZXR1cm4gU3RhdHVzOw0KICAgfQ0KDQotICBTdGF0dXMgPSBFbW1jVHVu aW5nQ2xrRm9ySHMyMDAgKFBjaUlvLCBQYXNzVGhydSwgU2xvdCwgQnVzV2lkdGgpOw0KKyAgaWYg KEJodEhvc3RQY2lTdXBwb3J0KFBjaUlvKSl7DQorICAgIFN0YXR1cyA9IFNkTW1jSGNXYWl0TW1p b1NldCAoDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UGNpSW8sDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFNsb3QsDQorICAgICAgICAgICAgICAgMHgxY2MsDQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiAoQ2xvY2tDdHJsKSwNCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQklUMTEsDQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJJVDExLA0KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRF9NTUNfQ0xPQ0tfU1RB QkxFX1RJTUVPVVQNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKTsNCisgICAgaWYgKEVGSV9FUlJPUihTdGF0dXMpKSB7DQorICAgICAgICAgICAgICAg IERiZ01zZyhMIldhaXQgQ2xvY2sgU3RhYmxlIHRpbWVvdXQsIENsb2NrRnJlcT0lZFxuIiwgQ2xv Y2tGcmVxKTsNCisgICAgICAgICAgICAgICAgcmV0dXJuIFN0YXR1czsNCisgICAgICB9DQorICB9 DQorDQorICBpZiAoRUZJX0VSUk9SKFN0YXR1cykpIHsNCisgICAgICAgICAgICAgIERiZ01zZyhM IkVtbWMgdHVuaW5nIGZhaWxlZFxuIik7DQorICAgICAgICAgICAgICByZXR1cm4gU3RhdHVzOw0K KyAgfQ0KKw0KKw0KDQogICByZXR1cm4gU3RhdHVzOw0KfQ0KQEAgLTkyMiwxMiArOTc2LDkgQEAg RW1tY1N3aXRjaFRvSFM0MDAgKA0KICAgSU4gVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBDbG9ja0ZyZXENCiAgICkNCnsNCi0gIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgIFN0 YXR1czsNCi0gIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgIEhzVGltaW5nOw0KLSAgU0RfTU1D X0JVU19NT0RFICAgICAgICAgICAgVGltaW5nOw0KLSAgU0RfTU1DX0hDX1BSSVZBVEVfREFUQSAg ICAgKlByaXZhdGU7DQotDQotICBQcml2YXRlID0gU0RfTU1DX0hDX1BSSVZBVEVfRlJPTV9USElT IChQYXNzVGhydSk7DQorICBFRklfU1RBVFVTICAgICAgICAgIFN0YXR1czsNCisgIFVJTlQ4ICAg ICAgICAgICAgICAgSHNUaW1pbmc7DQorICBVSU5UOCAgICAgICAgICAgICAgIEhvc3RDdHJsMjsN Cg0KICAgU3RhdHVzID0gRW1tY1N3aXRjaFRvSFMyMDAgKFBjaUlvLCBQYXNzVGhydSwgU2xvdCwg UmNhLCBDbG9ja0ZyZXEsIDgpOw0KICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KQEAgLTkz Nyw3ICs5ODgsNyBAQCBFbW1jU3dpdGNoVG9IUzQwMCAoDQogICAvLyBTZXQgdG8gSGlnaHQgU3Bl ZWQgdGltaW5nIGFuZCBzZXQgdGhlIGNsb2NrIGZyZXF1ZW5jeSB0byBhIHZhbHVlIGxlc3MgdGhh biA1Mk1Iei4NCiAgIC8vDQogICBIc1RpbWluZyA9IDE7DQotICBTdGF0dXMgPSBFbW1jU3dpdGNo Q2xvY2tGcmVxIChQY2lJbywgUGFzc1RocnUsIFNsb3QsIFJjYSwgSHNUaW1pbmcsIFNkTW1jTW1j SHNTZHIsIDUyKTsNCisgIFN0YXR1cyA9IEVtbWNTd2l0Y2hDbG9ja0ZyZXEgKFBjaUlvLCBQYXNz VGhydSwgU2xvdCwgUmNhLCBIc1RpbWluZywgNTIpOw0KICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVz KSkgew0KICAgICByZXR1cm4gU3RhdHVzOw0KICAgfQ0KQEAgLTk0OCwxNiArOTk5LDI1IEBAIEVt bWNTd2l0Y2hUb0hTNDAwICgNCiAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCiAgICAgcmV0 dXJuIFN0YXR1czsNCiAgIH0NCi0NCi0gIFRpbWluZyA9IFNkTW1jTW1jSHM0MDA7DQotDQotICBT dGF0dXMgPSBTZE1tY0hjVWhzU2lnbmFsaW5nIChQcml2YXRlLT5Db250cm9sbGVySGFuZGxlLCBQ Y2lJbywgU2xvdCwgVGltaW5nKTsNCisgIC8vDQorICAvLyBDbGVhbiBVSFMgTW9kZSBTZWxlY3Qg ZmllbGQgb2YgSG9zdCBDb250cm9sIDIgcmVpZ3N0ZXIgYmVmb3JlIHVwZGF0ZQ0KKyAgLy8NCisg IEhvc3RDdHJsMiA9IChVSU5UOCl+MHg3Ow0KKyAgU3RhdHVzID0gU2RNbWNIY0FuZE1taW8gKFBj aUlvLCBTbG90LCBTRF9NTUNfSENfSE9TVF9DVFJMMiwgc2l6ZW9mIChIb3N0Q3RybDIpLCAmSG9z dEN0cmwyKTsNCisgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCisgICAgcmV0dXJuIFN0YXR1 czsNCisgIH0NCisgIC8vDQorICAvLyBTZXQgVUhTIE1vZGUgU2VsZWN0IGZpZWxkIG9mIEhvc3Qg Q29udHJvbCAyIHJlaWdzdGVyIHRvIEhTNDAwDQorICAvLw0KKyAgSG9zdEN0cmwyID0gQklUMCB8 IEJJVDI7DQorICBTdGF0dXMgPSBTZE1tY0hjT3JNbWlvIChQY2lJbywgU2xvdCwgU0RfTU1DX0hD X0hPU1RfQ1RSTDIsIHNpemVvZiAoSG9zdEN0cmwyKSwgJkhvc3RDdHJsMik7DQogICBpZiAoRUZJ X0VSUk9SIChTdGF0dXMpKSB7DQogICAgIHJldHVybiBTdGF0dXM7DQogICB9DQoNCiAgIEhzVGlt aW5nID0gMzsNCi0gIFN0YXR1cyA9IEVtbWNTd2l0Y2hDbG9ja0ZyZXEgKFBjaUlvLCBQYXNzVGhy dSwgU2xvdCwgUmNhLCBIc1RpbWluZywgVGltaW5nLCBDbG9ja0ZyZXEpOw0KKyAgU3RhdHVzID0g RW1tY1N3aXRjaENsb2NrRnJlcSAoUGNpSW8sIFBhc3NUaHJ1LCBTbG90LCBSY2EsIEhzVGltaW5n LCBDbG9ja0ZyZXEpOw0KDQogICByZXR1cm4gU3RhdHVzOw0KfQ0KQEAgLTEwMDgsNyArMTA2OCw3 IEBAIEVtbWNTZXRCdXNNb2RlICgNCiAgICAgcmV0dXJuIFN0YXR1czsNCiAgIH0NCg0KLSAgQVNT RVJUIChQcml2YXRlLT5CYXNlQ2xrRnJlcVtTbG90XSAhPSAwKTsNCisgIEFTU0VSVCAoUHJpdmF0 ZS0+Q2FwYWJpbGl0eVtTbG90XS5CYXNlQ2xrRnJlcSAhPSAwKTsNCiAgIC8vDQogICAvLyBDaGVj ayBpZiB0aGUgSG9zdCBDb250cm9sbGVyIHN1cHBvcnQgOGJpdHMgYnVzIHdpZHRoLg0KICAgLy8N CkBAIC0xMDgwLDYgKzExNDAsNDIgQEAgRW1tY1NldEJ1c01vZGUgKA0KICAgICAvLyBFeGVjdXRl IEhTMjAwIHRpbWluZyBzd2l0Y2ggcHJvY2VkdXJlDQogICAgIC8vDQogICAgIFN0YXR1cyA9IEVt bWNTd2l0Y2hUb0hTMjAwIChQY2lJbywgUGFzc1RocnUsIFNsb3QsIFJjYSwgQ2xvY2tGcmVxLCBC dXNXaWR0aCk7DQorICAgICAgICAgICAgICBpZiAoRUZJX0VSUk9SKFN0YXR1cykpIHsNCisgICAg ICBpZiAoQmh0SG9zdFBjaVN1cHBvcnQoUGNpSW8pKSB7DQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBVSU5UMzIgdmFsMzI7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBEYmdNc2coTCJzd2l0Y2ggdG8gSFMyMDAgMjAwTUhaIGZhaWxlZCwgZnJlcSBkZWNyZWFzZSB0 byAxMDBNSHpcbiIpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xvY2tGcmVx ID0gMTAwOw0KKw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2RNbWNIY1J3TW1p byAoUGNpSW8sIFNsb3QsIDB4M0MsIFRSVUUsIHNpemVvZih2YWwzMiksICZ2YWwzMik7DQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWwzMiAmPSB+QklUMjI7DQorICAgICAgICAg ICAgICAgICAgICBTZE1tY0hjUndNbWlvIChQY2lJbywgU2xvdCwgMHgzQywgRkFMU0UsIHNpemVv Zih2YWwzMiksICZ2YWwzMik7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWwz MiA9IChCSVQyNiB8IEJJVDI1KTsNCisgICAgICAgICAgICAgICAgICAgIFNkTW1jSGNPck1taW8g KFBjaUlvLCBTbG90LCAweDJDLCBzaXplb2YodmFsMzIpLCAmdmFsMzIpOw0KKw0KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzID0gRW1tY1N3aXRjaFRvSFMyMDAgKFBjaUlv LCBQYXNzVGhydSwgU2xvdCwgUmNhLCBDbG9ja0ZyZXEsIEJ1c1dpZHRoKTsNCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGlmIChFRklfRVJST1IoU3RhdHVzKSkgew0KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKChFeHRDc2QuRGV2aWNl VHlwZSAmIEJJVDEpICAhPSAwKSAmJiAoUHJpdmF0ZS0+Q2FwYWJpbGl0eVtTbG90XS5IaWdoU3Bl ZWQgIT0gMCkpIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIERiZ01zZyhMInN3aXRjaCB0byBIUzIwMCAxMDBNSFogZmFpbGVkLCBtb2RlIGRlY3JlYXNl IHRvIEhTIDUwTUh6XG4iKTsNCisNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBIc1RpbWluZyAgPSAxOw0KKyAgICAgICAgICAgICAgSXNEZHIgICAgID0gRkFMU0U7DQorICAg ICAgICAgICAgICBDbG9ja0ZyZXEgPSA1MjsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBTdGF0dXMgPSBFbW1jU3dpdGNoVG9IaWdoU3BlZWQgKFBjaUlv LCBQYXNzVGhydSwgU2xvdCwgUmNhLCBDbG9ja0ZyZXEsIElzRGRyLCBCdXNXaWR0aCk7DQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKChFeHRDc2QuRGV2 aWNlVHlwZSAmIEJJVDApICAhPSAwKSAmJiAoUHJpdmF0ZS0+Q2FwYWJpbGl0eVtTbG90XS5IaWdo U3BlZWQgIT0gMCkpIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBEYmdNc2coTCJzd2l0Y2ggdG8gSFMyMDAgMTAwTUhaIGZhaWxlZCwgbW9kZSBkZWNy ZWFzZSB0byBIUyAyNU1IelxuIik7DQorDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgSHNUaW1pbmcgID0gMTsNCisgICAgICAgICAgICAgIElzRGRyICAg ICA9IEZBTFNFOw0KKyAgICAgICAgICAgICAgQ2xvY2tGcmVxID0gMjY7DQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzID0gRW1tY1N3aXRjaFRv SGlnaFNwZWVkIChQY2lJbywgUGFzc1RocnUsIFNsb3QsIFJjYSwgQ2xvY2tGcmVxLCBJc0Rkciwg QnVzV2lkdGgpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB9DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Ug ew0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGJnTXNn KEwic3dpdGNoIHRvIEhTMjAwIDEwME1IWiBmYWlsZWQsIGJ1dCBlbW1jIGNoaXAgZGlkbid0IHN1 cHBvcnQgaHMgbW9kZVxuIik7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB9DQorICAgIH0NCiAgIH0gZWxzZSB7DQogICAgIC8vDQog ICAgIC8vIEV4ZWN1dGUgSGlnaCBTcGVlZCB0aW1pbmcgc3dpdGNoIHByb2NlZHVyZQ0KDQpQbGVh c2UgY2hlY2sgaXQhDQpCciwNCk1pa2UNCg0KRnJvbTogTWlrZSBMaSAoV0gpDQpTZW50OiAyMDE5 xOox1MIyM8jVIDE3OjI5DQpUbzogWGlhb2d1YW5nIFl1IChXSCk7IEVybmVzdCBaaGFuZyhXSCk7 IEFuZHkgRGFpIChXSCkNCkNjOiBTaGlybGV5IEhlciAoU0MpOyAnZWRrMi1kZXZlbEBsaXN0cy4w MS5vcmcnDQpTdWJqZWN0OiBbZWRrMl0gW3BhdGNoXzFdIG1ha2UgRURLIERyaXZlciBTdXBwb3J0 IEJINzIwK0VNTUMgY2hpcA0KDQoNCkhpLCBhbGwNCg0KVGhlIGZvbGxvd2luZyBtb2RpZmljYXRp b25zIGFyZSBtYWRlIHRvIGVuYWJsZSBFREsgRHJpdmVyIFN1cHBvcnQgQkg3MjAgQ0hJUC4NCg0K LS0tIC9jL015V29ya3NwYWNlL2VkazItdlVESzIwMTgvTWRlTW9kdWxlUGtnL0J1cy9QY2kvU2RN bWNQY2lIY0R4ZS9TZE1tY1BjaUhjaS5jICAgICAgICAgICAgMjAxOS0wMS0xMCAxNDozNToyMS4z NDI3MzYyMDAgLTA4MDANCisrKyAvYy95eC9lZGsyL01kZU1vZHVsZVBrZy9CdXMvUGNpL1NkTW1j UGNpSGNEeGUvU2RNbWNQY2lIY2kuYyAgICAgICAgIDIwMTktMDEtMjEgMTU6MzY6MTIuMTk1NzE1 MzAwIC0wODAwDQpAQCAtNCw2ICs0LDcgQEANCg0KICAgSXQgd291bGQgZXhwb3NlIEVGSV9TRF9N TUNfUEFTU19USFJVX1BST1RPQ09MIGZvciB1cHBlciBsYXllciB1c2UuDQoNCisgIENvcHlyaWdo dCAoYykgMjAxOCwgTlZJRElBIENPUlBPUkFUSU9OLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KICAg Q29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNywgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMg cmVzZXJ2ZWQuPEJSPg0KICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVy aWFscw0KICAgYXJlIGxpY2Vuc2VkIGFuZCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMg YW5kIGNvbmRpdGlvbnMgb2YgdGhlIEJTRCBMaWNlbnNlDQpAQCAtMTYsOCArMTcsNiBAQA0KKiov DQoNCiAjaW5jbHVkZSAiU2RNbWNQY2lIY0R4ZS5oIg0KLWludCBnX2RldmljZUlkID0gMDsNCi0N Cg0KIC8qKg0KICAgRHVtcCB0aGUgY29udGVudCBvZiBTRC9NTUMgaG9zdCBjb250cm9sbGVyJ3Mg Q2FwYWJpbGl0eSBSZWdpc3Rlci4NCkBAIC00Nyw3ICs0Niw4IEBAIER1bXBDYXBhYmlsaXR5UmVn ICgNCiAgIERFQlVHICgoREVCVUdfSU5GTywgIiAgIFZvbHRhZ2UgMy4zICAgICAgICVhXG4iLCBD YXBhYmlsaXR5LT5Wb2x0YWdlMzMgPyAiVFJVRSIgOiAiRkFMU0UiKSk7DQogICBERUJVRyAoKERF QlVHX0lORk8sICIgICBWb2x0YWdlIDMuMCAgICAgICAlYVxuIiwgQ2FwYWJpbGl0eS0+Vm9sdGFn ZTMwID8gIlRSVUUiIDogIkZBTFNFIikpOw0KICAgREVCVUcgKChERUJVR19JTkZPLCAiICAgVm9s dGFnZSAxLjggICAgICAgJWFcbiIsIENhcGFiaWxpdHktPlZvbHRhZ2UxOCA/ICJUUlVFIiA6ICJG QUxTRSIpKTsNCi0gIERFQlVHICgoREVCVUdfSU5GTywgIiAgIDY0LWJpdCBTeXMgQnVzICAgICVh XG4iLCBDYXBhYmlsaXR5LT5TeXNCdXM2NCA/ICJUUlVFIiA6ICJGQUxTRSIpKTsNCisgIERFQlVH ICgoREVCVUdfSU5GTywgIiAgIFY0IDY0LWJpdCBTeXMgQnVzICVhXG4iLCBDYXBhYmlsaXR5LT5T eXNCdXM2NFY0ID8gIlRSVUUiIDogIkZBTFNFIikpOw0KKyAgREVCVUcgKChERUJVR19JTkZPLCAi ICAgVjMgNjQtYml0IFN5cyBCdXMgJWFcbiIsIENhcGFiaWxpdHktPlN5c0J1czY0VjMgPyAiVFJV RSIgOiAiRkFMU0UiKSk7DQogICBERUJVRyAoKERFQlVHX0lORk8sICIgICBBc3luYyBJbnRlcnJ1 cHQgICAlYVxuIiwgQ2FwYWJpbGl0eS0+QXN5bmNJbnQgPyAiVFJVRSIgOiAiRkFMU0UiKSk7DQog ICBERUJVRyAoKERFQlVHX0lORk8sICIgICBTbG90VHlwZSAgICAgICAgICAiKSk7DQogICBpZiAo Q2FwYWJpbGl0eS0+U2xvdFR5cGUgPT0gMHgwMCkgew0KQEAgLTQxOSw5ICs0MTksMzkgQEAgU2RN bWNIY1dhaXRNbWlvU2V0ICgNCn0NCg0KIC8qKg0KKyAgR2V0IHRoZSBjb250cm9sbGVyIHZlcnNp b24gaW5mb3JtYXRpb24gZnJvbSB0aGUgc3BlY2lmaWVkIHNsb3QuDQorDQorICBAcGFyYW1baW5d ICBQY2lJbyAgICAgICAgICAgVGhlIFBDSSBJTyBwcm90b2NvbCBpbnN0YW5jZS4NCisgIEBwYXJh bVtpbl0gIFNsb3QgICAgICAgICAgICBUaGUgc2xvdCBudW1iZXIgb2YgdGhlIFNEIGNhcmQgdG8g c2VuZCB0aGUgY29tbWFuZCB0by4NCisgIEBwYXJhbVtvdXRdIFZlcnNpb24gICAgICAgICBUaGUg YnVmZmVyIHRvIHN0b3JlIHRoZSB2ZXJzaW9uIGluZm9ybWF0aW9uLg0KKw0KKyAgQHJldHZhbCBF RklfU1VDQ0VTUyAgICAgICAgIFRoZSBvcGVyYXRpb24gZXhlY3V0ZXMgc3VjY2Vzc2Z1bGx5Lg0K KyAgQHJldHZhbCBPdGhlcnMgICAgICAgICAgICAgIFRoZSBvcGVyYXRpb24gZmFpbHMuDQorDQor KiovDQorRUZJX1NUQVRVUw0KK1NkTW1jSGNHZXRDb250cm9sbGVyVmVyc2lvbiAoDQorICBJTiAg ICAgRUZJX1BDSV9JT19QUk9UT0NPTCAgKlBjaUlvLA0KKyAgSU4gICAgIFVJTlQ4ICAgICAgICAg ICAgICAgIFNsb3QsDQorICBPVVQgICAgVUlOVDE2ICAgICAgICAgICAgICAgKlZlcnNpb24NCisg ICkNCit7DQorICBFRklfU1RBVFVTICAgICAgICAgICAgICAgIFN0YXR1czsNCisNCisgIFN0YXR1 cyA9IFNkTW1jSGNSd01taW8gKFBjaUlvLCBTbG90LCBTRF9NTUNfSENfQ1RSTF9WRVIsIFRSVUUs IHNpemVvZiAoVUlOVDE2KSwgVmVyc2lvbik7DQorICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7 DQorICAgIHJldHVybiBTdGF0dXM7DQorICB9DQorDQorICAqVmVyc2lvbiAmPSAweEZGOw0KKw0K KyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KK30NCisNCisvKioNCiAgIFNvZnR3YXJlIHJlc2V0IHRo ZSBzcGVjaWZpZWQgU0QvTU1DIGhvc3QgY29udHJvbGxlciBhbmQgZW5hYmxlIGFsbCBpbnRlcnJ1 cHRzLg0KDQotICBAcGFyYW1baW5dIFBjaUlvICAgICAgICAgIFRoZSBQQ0kgSU8gcHJvdG9jb2wg aW5zdGFuY2UuDQorICBAcGFyYW1baW5dIFByaXZhdGUgICAgICAgIEEgcG9pbnRlciB0byB0aGUg U0RfTU1DX0hDX1BSSVZBVEVfREFUQSBpbnN0YW5jZS4NCiAgIEBwYXJhbVtpbl0gU2xvdCAgICAg ICAgICAgVGhlIHNsb3QgbnVtYmVyIG9mIHRoZSBTRCBjYXJkIHRvIHNlbmQgdGhlIGNvbW1hbmQg dG8uDQoNCiAgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgVGhlIHNvZnR3YXJlIHJlc2V0IGV4 ZWN1dGVzIHN1Y2Nlc3NmdWxseS4NCkBAIC00MzAsMTggKzQ2MCwzOCBAQCBTZE1tY0hjV2FpdE1t aW9TZXQgKA0KKiovDQpFRklfU1RBVFVTDQpTZE1tY0hjUmVzZXQgKA0KLSAgSU4gRUZJX1BDSV9J T19QUk9UT0NPTCAgICAqUGNpSW8sDQorICBJTiBTRF9NTUNfSENfUFJJVkFURV9EQVRBICpQcml2 YXRlLA0KICAgSU4gVUlOVDggICAgICAgICAgICAgICAgICBTbG90DQogICApDQp7DQogICBFRklf U1RBVFVTICAgICAgICAgICAgICAgIFN0YXR1czsNCiAgIFVJTlQ4ICAgICAgICAgICAgICAgICAg ICAgU3dSZXNldDsNCisgIEVGSV9QQ0lfSU9fUFJPVE9DT0wgICAgICAgKlBjaUlvOw0KKw0KKyAg Ly8NCisgIC8vIE5vdGlmeSB0aGUgU0QvTU1DIG92ZXJyaWRlIHByb3RvY29sIHRoYXQgd2UgYXJl IGFib3V0IHRvIHJlc2V0DQorICAvLyB0aGUgU0QvTU1DIGhvc3QgY29udHJvbGxlci4NCisgIC8v DQorICBpZiAobU92ZXJyaWRlICE9IE5VTEwgJiYgbU92ZXJyaWRlLT5Ob3RpZnlQaGFzZSAhPSBO VUxMKSB7DQorICAgIFN0YXR1cyA9IG1PdmVycmlkZS0+Tm90aWZ5UGhhc2UgKA0KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgUHJpdmF0ZS0+Q29udHJvbGxlckhhbmRsZSwNCisgICAgICAgICAg ICAgICAgICAgICAgICAgIFNsb3QsDQorICAgICAgICAgICAgICAgICAgICAgICAgICBFZGtpaVNk TW1jUmVzZXRQcmUsDQorICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsNCisgICAgaWYg KEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICAgIERFQlVHICgoREVCVUdfV0FSTiwNCisgICAg ICAgICIlYTogU0QvTU1DIHByZSByZXNldCBub3RpZmllciBjYWxsYmFjayBmYWlsZWQgLSAlclxu IiwNCisgICAgICAgIF9fRlVOQ1RJT05fXywgU3RhdHVzKSk7DQorICAgICAgcmV0dXJuIFN0YXR1 czsNCisgICAgfQ0KKyAgfQ0KDQotICBTd1Jlc2V0ID0gMHhGRjsNCi0gIFN0YXR1cyAgPSBTZE1t Y0hjUndNbWlvIChQY2lJbywgU2xvdCwgU0RfTU1DX0hDX1NXX1JTVCwgRkFMU0UsIHNpemVvZiAo U3dSZXNldCksICZTd1Jlc2V0KTsNCisgIFBjaUlvICAgPSBQcml2YXRlLT5QY2lJbzsNCisgIFN3 UmVzZXQgPSBCSVQwOw0KKyAgU3RhdHVzICA9IFNkTW1jSGNPck1taW8gKFBjaUlvLCBTbG90LCBT RF9NTUNfSENfU1dfUlNULCBzaXplb2YgKFN3UmVzZXQpLCAmU3dSZXNldCk7DQoNCiAgIGlmIChF RklfRVJST1IgKFN0YXR1cykpIHsNCi0gICAgREVCVUcgKChERUJVR19FUlJPUiwgIlNkTW1jSGNS ZXNldDogd3JpdGUgZnVsbCAxIGZhaWxzOiAlclxuIiwgU3RhdHVzKSk7DQorICAgIERFQlVHICgo REVCVUdfRVJST1IsICJTZE1tY0hjUmVzZXQ6IHdyaXRlIFNXIFJlc2V0IGZvciBBbGwgZmFpbHM6 ICVyXG4iLCBTdGF0dXMpKTsNCiAgICAgcmV0dXJuIFN0YXR1czsNCiAgIH0NCg0KQEAgLTQ1MCw3 ICs1MDAsNyBAQCBTZE1tY0hjUmVzZXQgKA0KICAgICAgICAgICAgICBTbG90LA0KICAgICAgICAg ICAgICBTRF9NTUNfSENfU1dfUlNULA0KICAgICAgICAgICAgICBzaXplb2YgKFN3UmVzZXQpLA0K LSAgICAgICAgICAgICAweEZGLA0KKyAgICAgICAgICAgICBCSVQwLA0KICAgICAgICAgICAgICAw eDAwLA0KICAgICAgICAgICAgICBTRF9NTUNfSENfR0VORVJJQ19USU1FT1VUDQogICAgICAgICAg ICAgICk7DQpAQCAtNDU4LDEwICs1MDgsMzMgQEAgU2RNbWNIY1Jlc2V0ICgNCiAgICAgREVCVUcg KChERUJVR19JTkZPLCAiU2RNbWNIY1Jlc2V0OiByZXNldCBkb25lIHdpdGggJXJcbiIsIFN0YXR1 cykpOw0KICAgICByZXR1cm4gU3RhdHVzOw0KICAgfQ0KKw0KICAgLy8NCiAgIC8vIEVuYWJsZSBh bGwgaW50ZXJydXB0IGFmdGVyIHJlc2V0IGFsbC4NCiAgIC8vDQogICBTdGF0dXMgPSBTZE1tY0hj RW5hYmxlSW50ZXJydXB0IChQY2lJbywgU2xvdCk7DQorICBpZiAoRUZJX0VSUk9SIChTdGF0dXMp KSB7DQorICAgIERFQlVHICgoREVCVUdfSU5GTywgIlNkTW1jSGNSZXNldDogU2RNbWNIY0VuYWJs ZUludGVycnVwdCBkb25lIHdpdGggJXJcbiIsDQorICAgICAgU3RhdHVzKSk7DQorICAgIHJldHVy biBTdGF0dXM7DQorICB9DQorDQorICAvLw0KKyAgLy8gTm90aWZ5IHRoZSBTRC9NTUMgb3ZlcnJp ZGUgcHJvdG9jb2wgdGhhdCB3ZSBoYXZlIGp1c3QgcmVzZXQNCisgIC8vIHRoZSBTRC9NTUMgaG9z dCBjb250cm9sbGVyLg0KKyAgLy8NCisgIGlmIChtT3ZlcnJpZGUgIT0gTlVMTCAmJiBtT3ZlcnJp ZGUtPk5vdGlmeVBoYXNlICE9IE5VTEwpIHsNCisgICAgU3RhdHVzID0gbU92ZXJyaWRlLT5Ob3Rp ZnlQaGFzZSAoDQorICAgICAgICAgICAgICAgICAgICAgICAgICBQcml2YXRlLT5Db250cm9sbGVy SGFuZGxlLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgU2xvdCwNCisgICAgICAgICAgICAg ICAgICAgICAgICAgIEVka2lpU2RNbWNSZXNldFBvc3QsDQorICAgICAgICAgICAgICAgICAgICAg ICAgICBOVUxMKTsNCisgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICAgIERFQlVH ICgoREVCVUdfV0FSTiwNCisgICAgICAgICIlYTogU0QvTU1DIHBvc3QgcmVzZXQgbm90aWZpZXIg Y2FsbGJhY2sgZmFpbGVkIC0gJXJcbiIsDQorICAgICAgICBfX0ZVTkNUSU9OX18sIFN0YXR1cykp Ow0KKyAgICB9DQorICB9DQoNCiAgIHJldHVybiBTdGF0dXM7DQp9DQpAQCAtNjgwLDcgKzc1Myw4 IEBAIFNkTW1jSGNTdG9wQ2xvY2sgKA0KICAgQHBhcmFtW2luXSBQY2lJbyAgICAgICAgICBUaGUg UENJIElPIHByb3RvY29sIGluc3RhbmNlLg0KICAgQHBhcmFtW2luXSBTbG90ICAgICAgICAgICBU aGUgc2xvdCBudW1iZXIgb2YgdGhlIFNEIGNhcmQgdG8gc2VuZCB0aGUgY29tbWFuZCB0by4NCiAg IEBwYXJhbVtpbl0gQ2xvY2tGcmVxICAgICAgVGhlIG1heCBjbG9jayBmcmVxdWVuY3kgdG8gYmUg c2V0LiBUaGUgdW5pdCBpcyBLSHouDQotICBAcGFyYW1baW5dIENhcGFiaWxpdHkgICAgIFRoZSBj YXBhYmlsaXR5IG9mIHRoZSBzbG90Lg0KKyAgQHBhcmFtW2luXSBCYXNlQ2xrRnJlcSAgICBUaGUg YmFzZSBjbG9jayBmcmVxdWVuY3kgb2YgaG9zdCBjb250cm9sbGVyIGluIE1Iei4NCisgIEBwYXJh bVtpbl0gQ29udHJvbGxlclZlciAgVGhlIHZlcnNpb24gb2YgaG9zdCBjb250cm9sbGVyLg0KDQog ICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgIFRoZSBjbG9jayBpcyBzdXBwbGllZCBzdWNjZXNz ZnVsbHkuDQogICBAcmV0dmFsIE90aGVycyAgICAgICAgICAgIFRoZSBjbG9jayBpc24ndCBzdXBw bGllZCBzdWNjZXNzZnVsbHkuDQpAQCAtNjkxLDIzICs3NjUsMjEgQEAgU2RNbWNIY0Nsb2NrU3Vw cGx5ICgNCiAgIElOIEVGSV9QQ0lfSU9fUFJPVE9DT0wgICAgKlBjaUlvLA0KICAgSU4gVUlOVDgg ICAgICAgICAgICAgICAgICBTbG90LA0KICAgSU4gVUlOVDY0ICAgICAgICAgICAgICAgICBDbG9j a0ZyZXEsDQotICBJTiBTRF9NTUNfSENfU0xPVF9DQVAgICAgIENhcGFiaWxpdHkNCisgIElOIFVJ TlQzMiAgICAgICAgICAgICAgICAgQmFzZUNsa0ZyZXEsDQorICBJTiBVSU5UMTYgICAgICAgICAg ICAgICAgIENvbnRyb2xsZXJWZXINCiAgICkNCnsNCiAgIEVGSV9TVEFUVVMgICAgICAgICAgICAg ICAgU3RhdHVzOw0KLSAgVUlOVDMyICAgICAgICAgICAgICAgICAgICBCYXNlQ2xrRnJlcTsNCiAg IFVJTlQzMiAgICAgICAgICAgICAgICAgICAgU2V0dGluZ0ZyZXE7DQogICBVSU5UMzIgICAgICAg ICAgICAgICAgICAgIERpdmlzb3I7DQogICBVSU5UMzIgICAgICAgICAgICAgICAgICAgIFJlbWFp bmRlcjsNCi0gIFVJTlQxNiAgICAgICAgICAgICAgICAgICAgQ29udHJvbGxlclZlcjsNCiAgIFVJ TlQxNiAgICAgICAgICAgICAgICAgICAgQ2xvY2tDdHJsOw0KDQogICAvLw0KICAgLy8gQ2FsY3Vs YXRlIGEgZGl2aXNvciBmb3IgU0QgY2xvY2sgZnJlcXVlbmN5DQogICAvLw0KLSAgQVNTRVJUIChD YXBhYmlsaXR5LkJhc2VDbGtGcmVxICE9IDApOw0KKyAgQVNTRVJUIChCYXNlQ2xrRnJlcSAhPSAw KTsNCg0KLSAgQmFzZUNsa0ZyZXEgPSBDYXBhYmlsaXR5LkJhc2VDbGtGcmVxOw0KICAgaWYgKENs b2NrRnJlcSA9PSAwKSB7DQogICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQogICB9 DQpAQCAtNzM2LDE3ICs4MDgsMTUgQEAgU2RNbWNIY0Nsb2NrU3VwcGx5ICgNCg0KICAgREVCVUcg KChERUJVR19JTkZPLCAiQmFzZUNsa0ZyZXEgJWRNSHogRGl2aXNvciAlZCBDbG9ja0ZyZXEgJWRL aHpcbiIsIEJhc2VDbGtGcmVxLCBEaXZpc29yLCBDbG9ja0ZyZXEpKTsNCg0KLSAgU3RhdHVzID0g U2RNbWNIY1J3TW1pbyAoUGNpSW8sIFNsb3QsIFNEX01NQ19IQ19DVFJMX1ZFUiwgVFJVRSwgc2l6 ZW9mIChDb250cm9sbGVyVmVyKSwgJkNvbnRyb2xsZXJWZXIpOw0KLSAgaWYgKEVGSV9FUlJPUiAo U3RhdHVzKSkgew0KLSAgICByZXR1cm4gU3RhdHVzOw0KLSAgfQ0KICAgLy8NCiAgIC8vIFNldCBT RENMSyBGcmVxdWVuY3kgU2VsZWN0IGFuZCBJbnRlcm5hbCBDbG9jayBFbmFibGUgZmllbGRzIGlu IENsb2NrIENvbnRyb2wgcmVnaXN0ZXIuDQogICAvLw0KLSAgaWYgKCgoQ29udHJvbGxlclZlciAm IDB4RkYpID09IDIpIHx8ICgoQ29udHJvbGxlclZlciAmIDB4RkYpID09IDMpKSB7DQorICBpZiAo KENvbnRyb2xsZXJWZXIgPj0gU0RfTU1DX0hDX0NUUkxfVkVSXzMwMCkgJiYNCisgICAgICAoQ29u dHJvbGxlclZlciA8PSBTRF9NTUNfSENfQ1RSTF9WRVJfNDIwKSkgew0KICAgICBBU1NFUlQgKERp dmlzb3IgPD0gMHgzRkYpOw0KICAgICBDbG9ja0N0cmwgPSAoKERpdmlzb3IgJiAweEZGKSA8PCA4 KSB8ICgoRGl2aXNvciAmIDB4MzAwKSA+PiAyKTsNCi0gIH0gZWxzZSBpZiAoKChDb250cm9sbGVy VmVyICYgMHhGRikgPT0gMCkgfHwgKChDb250cm9sbGVyVmVyICYgMHhGRikgPT0gMSkpIHsNCisg IH0gZWxzZSBpZiAoKENvbnRyb2xsZXJWZXIgPT0gU0RfTU1DX0hDX0NUUkxfVkVSXzEwMCkgfHwN CisgICAgICAgICAgICAgKENvbnRyb2xsZXJWZXIgPT0gU0RfTU1DX0hDX0NUUkxfVkVSXzIwMCkp IHsNCiAgICAgLy8NCiAgICAgLy8gT25seSB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQgY2FuIGJl IHVzZWQgYXMgZGl2aXNvci4NCiAgICAgLy8NCkBAIC04OTQsMTEgKzk2NCw2MiBAQCBTZE1tY0hj U2V0QnVzV2lkdGggKA0KfQ0KDQogLyoqDQotICBTdXBwbHkgU0QvTU1DIGNhcmQgd2l0aCBsb3dl c3QgY2xvY2sgZnJlcXVlbmN5IGF0IGluaXRpYWxpemF0aW9uLg0KKyAgQ29uZmlndXJlIFY0IGNv bnRyb2xsZXIgZW5oYW5jZW1lbnRzIGF0IGluaXRpYWxpemF0aW9uLg0KDQogICBAcGFyYW1baW5d IFBjaUlvICAgICAgICAgIFRoZSBQQ0kgSU8gcHJvdG9jb2wgaW5zdGFuY2UuDQogICBAcGFyYW1b aW5dIFNsb3QgICAgICAgICAgIFRoZSBzbG90IG51bWJlciBvZiB0aGUgU0QgY2FyZCB0byBzZW5k IHRoZSBjb21tYW5kIHRvLg0KICAgQHBhcmFtW2luXSBDYXBhYmlsaXR5ICAgICBUaGUgY2FwYWJp bGl0eSBvZiB0aGUgc2xvdC4NCisgIEBwYXJhbVtpbl0gQ29udHJvbGxlclZlciAgVGhlIHZlcnNp b24gb2YgaG9zdCBjb250cm9sbGVyLg0KKw0KKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICBU aGUgY2xvY2sgaXMgc3VwcGxpZWQgc3VjY2Vzc2Z1bGx5Lg0KKw0KKyoqLw0KK0VGSV9TVEFUVVMN CitTZE1tY0hjSW5pdFY0RW5oYW5jZW1lbnRzICgNCisgIElOIEVGSV9QQ0lfSU9fUFJPVE9DT0wg ICAgKlBjaUlvLA0KKyAgSU4gVUlOVDggICAgICAgICAgICAgICAgICBTbG90LA0KKyAgSU4gU0Rf TU1DX0hDX1NMT1RfQ0FQICAgICBDYXBhYmlsaXR5LA0KKyAgSU4gVUlOVDE2ICAgICAgICAgICAg ICAgICBDb250cm9sbGVyVmVyDQorICApDQorew0KKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAg ICBTdGF0dXM7DQorICBVSU5UMTYgICAgICAgICAgICAgICAgICAgIEhvc3RDdHJsMjsNCisNCisg IC8vDQorICAvLyBDaGVjayBpZiBjb250cm9sbGVyIHZlcnNpb24gVjQgb3IgaGlnaGVyDQorICAv Lw0KKyAgaWYgKENvbnRyb2xsZXJWZXIgPj0gU0RfTU1DX0hDX0NUUkxfVkVSXzQwMCkgew0KKyAg ICBIb3N0Q3RybDIgPSBTRF9NTUNfSENfVjRfRU47DQorICAgIC8vDQorICAgIC8vIENoZWNrIGlm IFY0IDY0Yml0IHN1cHBvcnQgaXMgYXZhaWxhYmxlDQorICAgIC8vDQorICAgIGlmIChDYXBhYmls aXR5LlN5c0J1czY0VjQgIT0gMCkgew0KKyAgICAgIEhvc3RDdHJsMiB8PSBTRF9NTUNfSENfNjRf QUREUl9FTjsNCisgICAgICBERUJVRyAoKERFQlVHX0lORk8sICJFbmFibGVkIFY0IDY0IGJpdCBz eXN0ZW0gYnVzIHN1cHBvcnRcbiIpKTsNCisgICAgfQ0KKyAgICAvLw0KKyAgICAvLyBDaGVjayBp ZiBjb250cm9sbGVyIHZlcnNpb24gVjQuMTAgb3IgaGlnaGVyDQorICAgIC8vDQorICAgIGlmIChD b250cm9sbGVyVmVyID49IFNEX01NQ19IQ19DVFJMX1ZFUl80MTApIHsNCisgICAgICBIb3N0Q3Ry bDIgfD0gU0RfTU1DX0hDXzI2X0RBVEFfTEVOX0FETUFfRU47DQorICAgICAgREVCVUcgKChERUJV R19JTkZPLCAiRW5hYmxlZCBWNCAyNiBiaXQgZGF0YSBsZW5ndGggQURNQSBzdXBwb3J0XG4iKSk7 DQorICAgIH0NCisgICAgU3RhdHVzID0gU2RNbWNIY09yTW1pbyAoUGNpSW8sIFNsb3QsIFNEX01N Q19IQ19IT1NUX0NUUkwyLCBzaXplb2YgKEhvc3RDdHJsMiksICZIb3N0Q3RybDIpOw0KKyAgICBp ZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQorICAgICAgcmV0dXJuIFN0YXR1czsNCisgICAgfQ0K KyAgfQ0KKw0KKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KK30NCisNCisvKioNCisgIFN1cHBseSBT RC9NTUMgY2FyZCB3aXRoIGxvd2VzdCBjbG9jayBmcmVxdWVuY3kgYXQgaW5pdGlhbGl6YXRpb24u DQorDQorICBAcGFyYW1baW5dIFBjaUlvICAgICAgICAgIFRoZSBQQ0kgSU8gcHJvdG9jb2wgaW5z dGFuY2UuDQorICBAcGFyYW1baW5dIFNsb3QgICAgICAgICAgIFRoZSBzbG90IG51bWJlciBvZiB0 aGUgU0QgY2FyZCB0byBzZW5kIHRoZSBjb21tYW5kIHRvLg0KKyAgQHBhcmFtW2luXSBCYXNlQ2xr RnJlcSAgICBUaGUgYmFzZSBjbG9jayBmcmVxdWVuY3kgb2YgaG9zdCBjb250cm9sbGVyIGluIE1I ei4NCisgIEBwYXJhbVtpbl0gQ29udHJvbGxlclZlciAgVGhlIHZlcnNpb24gb2YgaG9zdCBjb250 cm9sbGVyLg0KDQogICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgIFRoZSBjbG9jayBpcyBzdXBw bGllZCBzdWNjZXNzZnVsbHkuDQogICBAcmV0dmFsIE90aGVycyAgICAgICAgICAgIFRoZSBjbG9j ayBpc24ndCBzdXBwbGllZCBzdWNjZXNzZnVsbHkuDQpAQCAtOTA4LDE2ICsxMDI5LDIwIEBAIEVG SV9TVEFUVVMNClNkTW1jSGNJbml0Q2xvY2tGcmVxICgNCiAgIElOIEVGSV9QQ0lfSU9fUFJPVE9D T0wgICAgKlBjaUlvLA0KICAgSU4gVUlOVDggICAgICAgICAgICAgICAgICBTbG90LA0KLSAgSU4g U0RfTU1DX0hDX1NMT1RfQ0FQICAgICBDYXBhYmlsaXR5DQorICBJTiBVSU5UMzIgICAgICAgICAg ICAgICAgIEJhc2VDbGtGcmVxLA0KKyAgSU4gVUlOVDE2ICAgICAgICAgICAgICAgICBDb250cm9s bGVyVmVyDQogICApDQp7DQogICBFRklfU1RBVFVTICAgICAgICAgICAgICAgIFN0YXR1czsNCiAg IFVJTlQzMiAgICAgICAgICAgICAgICAgICAgSW5pdEZyZXE7DQoNCiAgIC8vDQotICAvLyBDYWxj dWxhdGUgYSBkaXZpc29yIGZvciBTRCBjbG9jayBmcmVxdWVuY3kNCisgIC8vIEFjY29yZGluZyB0 byBTREhDSSBzcGVjaWZpY2F0aW9uIHZlci4gNC4yLCBCYXNlQ2xrRnJlcSBmaWVsZCB2YWx1ZSBv Zg0KKyAgLy8gdGhlIENhcGFiaWxpdHkgUmVnaXN0ZXIgMSBjYW4gYmUgemVybywgd2hpY2ggbWVh bnMgYSBuZWVkIGZvciBvYnRhaW5pbmcNCisgIC8vIHRoZSBjbG9jayBmcmVxdWVuY3kgdmlhIGFu b3RoZXIgbWV0aG9kLiBGYWlsIGluIGNhc2UgaXQgaXMgbm90IHVwZGF0ZWQNCisgIC8vIGJ5IFNX IGF0IHRoaXMgcG9pbnQuDQogICAvLw0KLSAgaWYgKENhcGFiaWxpdHkuQmFzZUNsa0ZyZXEgPT0g MCkgew0KKyAgaWYgKEJhc2VDbGtGcmVxID09IDApIHsNCiAgICAgLy8NCiAgICAgLy8gRG9uJ3Qg c3VwcG9ydCBnZXQgQmFzZSBDbG9jayBGcmVxdWVuY3kgaW5mb3JtYXRpb24gdmlhIGFub3RoZXIg bWV0aG9kDQogICAgIC8vDQpAQCAtOTI3LDcgKzEwNTIsNyBAQCBTZE1tY0hjSW5pdENsb2NrRnJl cSAoDQogICAvLyBTdXBwbHkgNDAwS0h6IGNsb2NrIGZyZXF1ZW5jeSBhdCBpbml0aWFsaXphdGlv biBwaGFzZS4NCiAgIC8vDQogICBJbml0RnJlcSA9IDQwMDsNCi0gIFN0YXR1cyA9IFNkTW1jSGND bG9ja1N1cHBseSAoUGNpSW8sIFNsb3QsIEluaXRGcmVxLCBDYXBhYmlsaXR5KTsNCisgIFN0YXR1 cyA9IFNkTW1jSGNDbG9ja1N1cHBseSAoUGNpSW8sIFNsb3QsIEluaXRGcmVxLCBCYXNlQ2xrRnJl cSwgQ29udHJvbGxlclZlcik7DQogICByZXR1cm4gU3RhdHVzOw0KfQ0KDQpAQCAtOTg4LDE1ICsx MTEzLDYgQEAgU2RNbWNIY0luaXRQb3dlclZvbHRhZ2UgKA0KICAgLy8gU2V0IFNEIEJ1cyBWb2x0 YWdlIFNlbGVjdCBhbmQgU0QgQnVzIFBvd2VyIGZpZWxkcyBpbiBQb3dlciBDb250cm9sIFJlZ2lz dGVyDQogICAvLw0KICAgU3RhdHVzID0gU2RNbWNIY1Bvd2VyQ29udHJvbCAoUGNpSW8sIFNsb3Qs IE1heFZvbHRhZ2UpOw0KLSAgaWYgKEJodEhvc3RQY2lTdXBwb3J0KFBjaUlvKSl7DQotICAgICAg ICAgICAgICAgIC8vIDEuOFYgc2lnbmFsaW5nIGVuYWJsZQ0KLSAgICAgICAgICAgICAgICBIb3N0 Q3RybDIgID0gQklUMzsNCi0gICAgICAgICAgICAgICAgU3RhdHVzID0gU2RNbWNIY09yTW1pbyAo UGNpSW8sIFNsb3QsIFNEX01NQ19IQ19IT1NUX0NUUkwyLCBzaXplb2YgKEhvc3RDdHJsMiksICZI b3N0Q3RybDIpOw0KLSAgICAgICAgICAgICAgICBnQlMtPlN0YWxsICg1MDAwKTsNCi0gICAgICAg ICAgICAgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHJldHVybiBTdGF0dXM7DQotICAgICAgICAgICAgICAgIH0NCi0gIH0NCg0KICAg cmV0dXJuIFN0YXR1czsNCn0NCkBAIC0xMDMyLDkgKzExNDgsOCBAQCBTZE1tY0hjSW5pdFRpbWVv dXRDdHJsICgNCiAgIEluaXRpYWwgU0QvTU1DIGhvc3QgY29udHJvbGxlciB3aXRoIGxvd2VzdCBj bG9jayBmcmVxdWVuY3ksIG1heCBwb3dlciBhbmQgbWF4IHRpbWVvdXQgdmFsdWUNCiAgIGF0IGlu aXRpYWxpemF0aW9uLg0KDQotICBAcGFyYW1baW5dIFBjaUlvICAgICAgICAgIFRoZSBQQ0kgSU8g cHJvdG9jb2wgaW5zdGFuY2UuDQorICBAcGFyYW1baW5dIFByaXZhdGUgICAgICAgIEEgcG9pbnRl ciB0byB0aGUgU0RfTU1DX0hDX1BSSVZBVEVfREFUQSBpbnN0YW5jZS4NCiAgIEBwYXJhbVtpbl0g U2xvdCAgICAgICAgICAgVGhlIHNsb3QgbnVtYmVyIG9mIHRoZSBTRCBjYXJkIHRvIHNlbmQgdGhl IGNvbW1hbmQgdG8uDQotICBAcGFyYW1baW5dIENhcGFiaWxpdHkgICAgIFRoZSBjYXBhYmlsaXR5 IG9mIHRoZSBzbG90Lg0KDQogICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgIFRoZSBob3N0IGNv bnRyb2xsZXIgaXMgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5Lg0KICAgQHJldHZhbCBPdGhlcnMg ICAgICAgICAgICBUaGUgaG9zdCBjb250cm9sbGVyIGlzbid0IGluaXRpYWxpemVkIHN1Y2Nlc3Nm dWxseS4NCkBAIC0xMDQyLDk2ICsxMTU3LDE2NCBAQCBTZE1tY0hjSW5pdFRpbWVvdXRDdHJsICgN CioqLw0KRUZJX1NUQVRVUw0KU2RNbWNIY0luaXRIb3N0ICgNCi0gIElOIEVGSV9QQ0lfSU9fUFJP VE9DT0wgICAgKlBjaUlvLA0KLSAgSU4gVUlOVDggICAgICAgICAgICAgICAgICBTbG90LA0KLSAg SU4gU0RfTU1DX0hDX1NMT1RfQ0FQICAgICBDYXBhYmlsaXR5DQorICBJTiBTRF9NTUNfSENfUFJJ VkFURV9EQVRBICpQcml2YXRlLA0KKyAgSU4gVUlOVDggICAgICAgICAgICAgICAgICBTbG90DQog ICApDQp7DQotICBFRklfU1RBVFVTICAgICAgIFN0YXR1czsNCi0gIFVJTlQzMiAgICAgICAgICAg dmFsdWUzMjsNCi0NCi0gIGlmIChCaHRIb3N0UGNpU3VwcG9ydChQY2lJbykpew0KLQ0KLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIERiZ01zZyhMImZpbmQgYmh0IGVtbWMgY2hpcFxuIik7 DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRkVUIG9uICovDQotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUGNpQmh0T3IzMihQY2lJbywgMHhFQywgMHgzKTsNCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBMZWQgb24gKi8NCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvL1BjaUJodEFuZDMyKFBjaUlvLCAweDMzNCwgKFVJTlQzMil+QklUMTMp Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBjaUJodE9yMzIoUGNpSW8sIDB4RDQs IEJJVDYpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNldCAxLjh2IGVtbWMg c2lnbmFsaW5nIGZsYWcgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQY2lCaHRP cjMyKFBjaUlvLCAweDMwOCwgQklUNCk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogU2V0IDIwME1CYXNlQ2xvY2sgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2 YWx1ZTMyID0gUGNpQmh0UmVhZDMyKFBjaUlvLCAweDMwNCk7DQotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdmFsdWUzMiAmPSAweDAwMDBGRkZGOw0KLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHZhbHVlMzIgfD0gMHgyNTEwMDAwMDsNCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBQY2lCaHRXcml0ZTMyKFBjaUlvLCAweDMwNCwgdmFsdWUzMik7DQotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUGNpQmh0T3IzMihQY2lJbywgMHgzRTQsIEJJVDIyKTsNCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQY2lCaHRXcml0ZTMyKFBjaUlvLCAweDMwMCwg MHgyMTQwMDAzMyk7DQotDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9lbmFibGUg aW50ZXJuYWwgY2xrDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUzMiA9IEJJ VDA7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzID0gU2RNbWNIY09yTW1p byAoUGNpSW8sIFNsb3QsIFNEX01NQ19IQ19DTE9DS19DVFJMLHNpemVvZih2YWx1ZTMyKSwgJnZh bHVlMzIpOw0KLQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vcmVzZXQgcGxsIHN0 YXJ0DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzID0gU2RNbWNIY1J3TW1p byAoUGNpSW8sIFNsb3QsIDB4MUNDLCBUUlVFLCBzaXplb2YodmFsdWUzMiksICZ2YWx1ZTMyKTsN Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTMyIHw9IEJJVDEyOw0KLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1cyA9IFNkTW1jSGNSd01taW8gKFBjaUlvLCBT bG90LCAweDFDQywgRkFMU0UsIHNpemVvZih2YWx1ZTMyKSwgJnZhbHVlMzIpOw0KLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGdCUy0+U3RhbGwoMSk7DQotDQotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLy9yZXNldCBwbGwgZW5kDQotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgU3RhdHVzID0gU2RNbWNIY1J3TW1pbyAoUGNpSW8sIFNsb3QsIDB4MUNDLCBUUlVFLHNp emVvZih2YWx1ZTMyKSwgJnZhbHVlMzIpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHZhbHVlMzIgJj0gfkJJVDEyOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVl MzIgfD0gQklUMTg7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzID0gU2RN bWNIY1J3TW1pbyAoUGNpSW8sIFNsb3QsIDB4MUNDLCBGQUxTRSwgc2l6ZW9mKHZhbHVlMzIpLCAm dmFsdWUzMik7DQotDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy93YWl0IEJhc2VD bGsgc3RhYmxlIDB4MUNDIGJpdDE0DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3Rh dHVzID0gU2RNbWNIY1J3TW1pbyAoUGNpSW8sIFNsb3QsIDB4MUNDLCBUUlVFLCBzaXplb2YodmFs dWUzMiksICZ2YWx1ZTMyKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSgh KHZhbHVlMzImQklUMTQpKXsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZ0JTLT5TdGFsbCgxMDApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBTdGF0dXMgPSBTZE1tY0hjUndNbWlvIChQY2lJbywgU2xvdCwgMHgx Q0MsIFRSVUUsIHNpemVvZih2YWx1ZTMyKSwgJnZhbHVlMzIpOw0KLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYmdNc2coTCIxQ0M9MHglMDh4XG4iLCB2YWx1 ZTMyKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQotDQotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlMzIgJiBCSVQxOCkNCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1dhaXQg Mm5kIENhcmQgRGV0ZWN0IGRlYm91bmNlIEZpbmlzaGVkIGJ5IHdhaXQgdHdpY2Ugb2YgZGVib3Vu Y2UgbWF4IHRpbWUNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgxKSB7 DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1cyA9IFNkTW1jSGNSd01t aW8gKFBjaUlvLCBTbG90LCBTRF9NTUNfSENfUFJFU0VOVF9TVEFURSwgVFJVRSwgc2l6ZW9mKHZh bHVlMzIpLCAmdmFsdWUzMik7DQotICAgICAgICAgICAgaWYgKCgodmFsdWUzMiA+PiAxNikgJiAw eDAxKSA9PSAoKHZhbHVlMzIgPj4gMTgpICYgMHgwMSkpDQotICAgICAgICAgICAgICBicmVhazsN Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8vZm9yY2UgcGxsIGFjdGl2ZSBlbmQNCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFN0YXR1cyA9IFNkTW1jSGNSd01taW8gKFBjaUlvLCBTbG90LCAweDFDQywg VFJVRSwgc2l6ZW9mKHZhbHVlMzIpLCAmdmFsdWUzMik7DQotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB2YWx1ZTMyICY9IH5CSVQxODsNCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFN0YXR1cyA9IFNkTW1jSGNSd01taW8gKFBjaUlvLCBTbG90LCAweDFDQywgRkFMU0Us IHNpemVvZih2YWx1ZTMyKSwgJnZhbHVlMzIpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIH0NCi0NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXMgPSBTZE1tY0hj SW5pdFBvd2VyVm9sdGFnZSAoUGNpSW8sIFNsb3QsIENhcGFiaWxpdHkpOw0KLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRGJnTXNnKEwiZW1tYyBob3N0IGluaXQgZmFpbHVyZVxu Iik7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBTdGF0dXM7DQot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLQ0KLQ0KLSAgfQ0KLQ0KLSAgU3RhdHVz ID0gU2RNbWNIY0luaXRDbG9ja0ZyZXEgKFBjaUlvLCBTbG90LCBDYXBhYmlsaXR5KTsNCi0gIGlm IChFRklfRVJST1IgKFN0YXR1cykpIHsNCi0gICAgcmV0dXJuIFN0YXR1czsNCi0gIH0NCi0NCi0g IGlmICghQmh0SG9zdFBjaVN1cHBvcnQoUGNpSW8pKXsNCi0gICAgICAgICAgICAgICAgU3RhdHVz ID0gU2RNbWNIY0luaXRQb3dlclZvbHRhZ2UgKFBjaUlvLCBTbG90LCBDYXBhYmlsaXR5KTsNCi0g ICAgICAgICAgICAgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KLSAgICAgICAgICAgICAg ICAgIHJldHVybiBTdGF0dXM7DQotICAgICAgICAgICAgICAgIH0NCisgIEVGSV9TVEFUVVMgICAg ICAgICAgICAgICAgU3RhdHVzOw0KKyAgRUZJX1BDSV9JT19QUk9UT0NPTCAgICAgICAqUGNpSW87 DQorICBTRF9NTUNfSENfU0xPVF9DQVAgICAgICAgIENhcGFiaWxpdHk7DQorDQorICAvLw0KKyAg Ly8gTm90aWZ5IHRoZSBTRC9NTUMgb3ZlcnJpZGUgcHJvdG9jb2wgdGhhdCB3ZSBhcmUgYWJvdXQg dG8gaW5pdGlhbGl6ZQ0KKyAgLy8gdGhlIFNEL01NQyBob3N0IGNvbnRyb2xsZXIuDQorICAvLw0K KyAgaWYgKG1PdmVycmlkZSAhPSBOVUxMICYmIG1PdmVycmlkZS0+Tm90aWZ5UGhhc2UgIT0gTlVM TCkgew0KKyAgICBTdGF0dXMgPSBtT3ZlcnJpZGUtPk5vdGlmeVBoYXNlICgNCisgICAgICAgICAg ICAgICAgICAgICAgICAgIFByaXZhdGUtPkNvbnRyb2xsZXJIYW5kbGUsDQorICAgICAgICAgICAg ICAgICAgICAgICAgICBTbG90LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgRWRraWlTZE1t Y0luaXRIb3N0UHJlLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7DQorICAgIGlm IChFRklfRVJST1IgKFN0YXR1cykpIHsNCisgICAgICBERUJVRyAoKERFQlVHX1dBUk4sDQorICAg ICAgICAiJWE6IFNEL01NQyBwcmUgaW5pdCBub3RpZmllciBjYWxsYmFjayBmYWlsZWQgLSAlclxu IiwNCisgICAgICAgIF9fRlVOQ1RJT05fXywgU3RhdHVzKSk7DQorICAgICAgcmV0dXJuIFN0YXR1 czsNCisgICAgfQ0KKyAgfQ0KKw0KKyAgUGNpSW8gPSBQcml2YXRlLT5QY2lJbzsNCisgIENhcGFi aWxpdHkgPSBQcml2YXRlLT5DYXBhYmlsaXR5W1Nsb3RdOw0KKw0KKyAgU3RhdHVzID0gU2RNbWNI Y0luaXRWNEVuaGFuY2VtZW50cyAoUGNpSW8sIFNsb3QsIENhcGFiaWxpdHksIFByaXZhdGUtPkNv bnRyb2xsZXJWZXJzaW9uW1Nsb3RdKTsNCisgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCisg ICAgcmV0dXJuIFN0YXR1czsNCisgIH0NCisNCisgIFN0YXR1cyA9IFNkTW1jSGNJbml0Q2xvY2tG cmVxIChQY2lJbywgU2xvdCwgUHJpdmF0ZS0+QmFzZUNsa0ZyZXFbU2xvdF0sIFByaXZhdGUtPkNv bnRyb2xsZXJWZXJzaW9uW1Nsb3RdKTsNCisgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCisg ICAgcmV0dXJuIFN0YXR1czsNCiAgIH0NCi0NCisNCisgIFN0YXR1cyA9IFNkTW1jSGNJbml0UG93 ZXJWb2x0YWdlIChQY2lJbywgU2xvdCwgQ2FwYWJpbGl0eSk7DQorICBpZiAoRUZJX0VSUk9SIChT dGF0dXMpKSB7DQorICAgIHJldHVybiBTdGF0dXM7DQorICB9DQorDQogICBTdGF0dXMgPSBTZE1t Y0hjSW5pdFRpbWVvdXRDdHJsIChQY2lJbywgU2xvdCk7DQorICBpZiAoRUZJX0VSUk9SIChTdGF0 dXMpKSB7DQorICAgIHJldHVybiBTdGF0dXM7DQorICB9DQorDQorICAvLw0KKyAgLy8gTm90aWZ5 IHRoZSBTRC9NTUMgb3ZlcnJpZGUgcHJvdG9jb2wgdGhhdCB3ZSBhcmUgaGF2ZSBqdXN0IGluaXRp YWxpemVkDQorICAvLyB0aGUgU0QvTU1DIGhvc3QgY29udHJvbGxlci4NCisgIC8vDQorICBpZiAo bU92ZXJyaWRlICE9IE5VTEwgJiYgbU92ZXJyaWRlLT5Ob3RpZnlQaGFzZSAhPSBOVUxMKSB7DQor ICAgIFN0YXR1cyA9IG1PdmVycmlkZS0+Tm90aWZ5UGhhc2UgKA0KKyAgICAgICAgICAgICAgICAg ICAgICAgICAgUHJpdmF0ZS0+Q29udHJvbGxlckhhbmRsZSwNCisgICAgICAgICAgICAgICAgICAg ICAgICAgIFNsb3QsDQorICAgICAgICAgICAgICAgICAgICAgICAgICBFZGtpaVNkTW1jSW5pdEhv c3RQb3N0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7DQorICAgIGlmIChFRklf RVJST1IgKFN0YXR1cykpIHsNCisgICAgICBERUJVRyAoKERFQlVHX1dBUk4sDQorICAgICAgICAi JWE6IFNEL01NQyBwb3N0IGluaXQgbm90aWZpZXIgY2FsbGJhY2sgZmFpbGVkIC0gJXJcbiIsDQor ICAgICAgICBfX0ZVTkNUSU9OX18sIFN0YXR1cykpOw0KKyAgICB9DQorICB9DQogICByZXR1cm4g U3RhdHVzOw0KfQ0KDQogLyoqDQorICBTZXQgU0QgSG9zdCBDb250cm9sZXIgY29udHJvbCAyIHJl Z2lzdHJ5IGFjY29yZGluZyB0byBzZWxlY3RlZCBzcGVlZC4NCisNCisgIEBwYXJhbVtpbl0gQ29u dHJvbGxlckhhbmRsZSBUaGUgaGFuZGxlIG9mIHRoZSBjb250cm9sbGVyLg0KKyAgQHBhcmFtW2lu XSBQY2lJbyAgICAgICAgICAgIFRoZSBQQ0kgSU8gcHJvdG9jb2wgaW5zdGFuY2UuDQorICBAcGFy YW1baW5dIFNsb3QgICAgICAgICAgICAgVGhlIHNsb3QgbnVtYmVyIG9mIHRoZSBTRCBjYXJkIHRv IHNlbmQgdGhlIGNvbW1hbmQgdG8uDQorICBAcGFyYW1baW5dIFRpbWluZyAgICAgICAgICAgVGhl IHRpbWluZyB0byBzZWxlY3QuDQorDQorICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgVGhl IHRpbWluZyBpcyBzZXQgc3VjY2Vzc2Z1bGx5Lg0KKyAgQHJldHZhbCBPdGhlcnMgICAgICAgICAg ICAgIFRoZSB0aW1pbmcgaXNuJ3Qgc2V0IHN1Y2Nlc3NmdWxseS4NCisqKi8NCitFRklfU1RBVFVT DQorU2RNbWNIY1Voc1NpZ25hbGluZyAoDQorICBJTiBFRklfSEFORExFICAgICAgICAgICAgIENv bnRyb2xsZXJIYW5kbGUsDQorICBJTiBFRklfUENJX0lPX1BST1RPQ09MICAgICpQY2lJbywNCisg IElOIFVJTlQ4ICAgICAgICAgICAgICAgICAgU2xvdCwNCisgIElOIFNEX01NQ19CVVNfTU9ERSAg ICAgICAgVGltaW5nDQorICApDQorew0KKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgU3Rh dHVzOw0KKyAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgSG9zdEN0cmwyOw0KKw0KKyAgSG9z dEN0cmwyID0gKFVJTlQ4KX5TRF9NTUNfSENfQ1RSTF9VSFNfTUFTSzsNCisgIFN0YXR1cyA9IFNk TW1jSGNBbmRNbWlvIChQY2lJbywgU2xvdCwgU0RfTU1DX0hDX0hPU1RfQ1RSTDIsIHNpemVvZiAo SG9zdEN0cmwyKSwgJkhvc3RDdHJsMik7DQorICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQor ICAgIHJldHVybiBTdGF0dXM7DQorICB9DQorDQorICBzd2l0Y2ggKFRpbWluZykgew0KKyAgICBj YXNlIFNkTW1jVWhzU2RyMTI6DQorICAgICAgSG9zdEN0cmwyID0gU0RfTU1DX0hDX0NUUkxfVUhT X1NEUjEyOw0KKyAgICAgIGJyZWFrOw0KKyAgICBjYXNlIFNkTW1jVWhzU2RyMjU6DQorICAgICAg SG9zdEN0cmwyID0gU0RfTU1DX0hDX0NUUkxfVUhTX1NEUjI1Ow0KKyAgICAgIGJyZWFrOw0KKyAg ICBjYXNlIFNkTW1jVWhzU2RyNTA6DQorICAgICAgSG9zdEN0cmwyID0gU0RfTU1DX0hDX0NUUkxf VUhTX1NEUjUwOw0KKyAgICAgIGJyZWFrOw0KKyAgICBjYXNlIFNkTW1jVWhzU2RyMTA0Og0KKyAg ICAgIEhvc3RDdHJsMiA9IFNEX01NQ19IQ19DVFJMX1VIU19TRFIxMDQ7DQorICAgICAgYnJlYWs7 DQorICAgIGNhc2UgU2RNbWNVaHNEZHI1MDoNCisgICAgICBIb3N0Q3RybDIgPSBTRF9NTUNfSENf Q1RSTF9VSFNfRERSNTA7DQorICAgICAgYnJlYWs7DQorICAgIGNhc2UgU2RNbWNNbWNMZWdhY3k6 DQorICAgICAgSG9zdEN0cmwyID0gU0RfTU1DX0hDX0NUUkxfTU1DX0xFR0FDWTsNCisgICAgICBi cmVhazsNCisgICAgY2FzZSBTZE1tY01tY0hzU2RyOg0KKyAgICAgIEhvc3RDdHJsMiA9IFNEX01N Q19IQ19DVFJMX01NQ19IU19TRFI7DQorICAgICAgYnJlYWs7DQorICAgIGNhc2UgU2RNbWNNbWNI c0RkcjoNCisgICAgICBIb3N0Q3RybDIgPSBTRF9NTUNfSENfQ1RSTF9NTUNfSFNfRERSOw0KKyAg ICAgIGJyZWFrOw0KKyAgICBjYXNlIFNkTW1jTW1jSHMyMDA6DQorICAgICAgSG9zdEN0cmwyID0g U0RfTU1DX0hDX0NUUkxfTU1DX0hTMjAwOw0KKyAgICAgIGJyZWFrOw0KKyAgICBjYXNlIFNkTW1j TW1jSHM0MDA6DQorICAgICAgSG9zdEN0cmwyID0gU0RfTU1DX0hDX0NUUkxfTU1DX0hTNDAwOw0K KyAgICAgIGJyZWFrOw0KKyAgICBkZWZhdWx0Og0KKyAgICAgSG9zdEN0cmwyID0gMDsNCisgICAg IGJyZWFrOw0KKyAgfQ0KKyAgU3RhdHVzID0gU2RNbWNIY09yTW1pbyAoUGNpSW8sIFNsb3QsIFNE X01NQ19IQ19IT1NUX0NUUkwyLCBzaXplb2YgKEhvc3RDdHJsMiksICZIb3N0Q3RybDIpOw0KKyAg aWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICByZXR1cm4gU3RhdHVzOw0KKyAgfQ0KKw0K KyAgaWYgKG1PdmVycmlkZSAhPSBOVUxMICYmIG1PdmVycmlkZS0+Tm90aWZ5UGhhc2UgIT0gTlVM TCkgew0KKyAgICBTdGF0dXMgPSBtT3ZlcnJpZGUtPk5vdGlmeVBoYXNlICgNCisgICAgICAgICAg ICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQorICAgICAgICAgICAgICAgICAgICAg ICAgICBTbG90LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgRWRraWlTZE1tY1Voc1NpZ25h bGluZywNCisgICAgICAgICAgICAgICAgICAgICAgICAgICZUaW1pbmcNCisgICAgICAgICAgICAg ICAgICAgICAgICAgICk7DQorICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCisgICAgICBE RUJVRyAoKA0KKyAgICAgICAgREVCVUdfRVJST1IsDQorICAgICAgICAiJWE6IFNEL01NQyB1aHMg c2lnbmFsaW5nIG5vdGlmaWVyIGNhbGxiYWNrIGZhaWxlZCAtICVyXG4iLA0KKyAgICAgICAgX19G VU5DVElPTl9fLA0KKyAgICAgICAgU3RhdHVzDQorICAgICAgICApKTsNCisgICAgICByZXR1cm4g U3RhdHVzOw0KKyAgICB9DQorICB9DQorDQorICByZXR1cm4gRUZJX1NVQ0NFU1M7DQorfQ0KKw0K Ky8qKg0KICAgVHVybiBvbi9vZmYgTEVELg0KDQogICBAcGFyYW1baW5dIFBjaUlvICAgICAgICAg IFRoZSBQQ0kgSU8gcHJvdG9jb2wgaW5zdGFuY2UuDQpAQCAtMTE2Niw5ICsxMzQ5LDEwIEBAIFNk TW1jSGNMZWRPbk9mZiAoDQovKioNCiAgIEJ1aWxkIEFETUEgZGVzY3JpcHRvciB0YWJsZSBmb3Ig dHJhbnNmZXIuDQoNCi0gIFJlZmVyIHRvIFNEIEhvc3QgQ29udHJvbGxlciBTaW1wbGlmaWVkIHNw ZWMgMy4wIFNlY3Rpb24gMS4xMyBmb3IgZGV0YWlscy4NCisgIFJlZmVyIHRvIFNEIEhvc3QgQ29u dHJvbGxlciBTaW1wbGlmaWVkIHNwZWMgNC4yIFNlY3Rpb24gMS4xMyBmb3IgZGV0YWlscy4NCg0K ICAgQHBhcmFtW2luXSBUcmIgICAgICAgICAgICBUaGUgcG9pbnRlciB0byB0aGUgU0RfTU1DX0hD X1RSQiBpbnN0YW5jZS4NCisgIEBwYXJhbVtpbl0gQ29udHJvbGxlclZlciAgVGhlIHZlcnNpb24g b2YgaG9zdCBjb250cm9sbGVyLg0KDQogICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgIFRoZSBB RE1BIGRlc2NyaXB0b3IgdGFibGUgaXMgY3JlYXRlZCBzdWNjZXNzZnVsbHkuDQogICBAcmV0dmFs IE90aGVycyAgICAgICAgICAgIFRoZSBBRE1BIGRlc2NyaXB0b3IgdGFibGUgaXNuJ3QgY3JlYXRl ZCBzdWNjZXNzZnVsbHkuDQpAQCAtMTE3Niw3ICsxMzYwLDggQEAgU2RNbWNIY0xlZE9uT2ZmICgN CioqLw0KRUZJX1NUQVRVUw0KQnVpbGRBZG1hRGVzY1RhYmxlICgNCi0gIElOIFNEX01NQ19IQ19U UkIgICAgICAgICAgKlRyYg0KKyAgSU4gU0RfTU1DX0hDX1RSQiAgICAgICAgICAqVHJiLA0KKyAg SU4gVUlOVDE2ICAgICAgICAgICAgICAgICBDb250cm9sbGVyVmVyDQogICApDQp7DQogICBFRklf UEhZU0lDQUxfQUREUkVTUyAgICAgIERhdGE7DQpAQCAtMTE4NCw0OSArMTM2OSw5MyBAQCBCdWls ZEFkbWFEZXNjVGFibGUgKA0KICAgVUlOVDY0ICAgICAgICAgICAgICAgICAgICBFbnRyaWVzOw0K ICAgVUlOVDMyICAgICAgICAgICAgICAgICAgICBJbmRleDsNCiAgIFVJTlQ2NCAgICAgICAgICAg ICAgICAgICAgUmVtYWluaW5nOw0KLSAgVUlOVDMyICAgICAgICAgICAgICAgICAgICBBZGRyZXNz Ow0KKyAgVUlOVDY0ICAgICAgICAgICAgICAgICAgICBBZGRyZXNzOw0KICAgVUlOVE4gICAgICAg ICAgICAgICAgICAgICBUYWJsZVNpemU7DQogICBFRklfUENJX0lPX1BST1RPQ09MICAgICAgICpQ Y2lJbzsNCiAgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgU3RhdHVzOw0KICAgVUlOVE4gICAg ICAgICAgICAgICAgICAgICBCeXRlczsNCisgIEJPT0xFQU4gICAgICAgICAgICAgICAgICAgQWRk cmVzc2luZ01vZGU2NDsNCisgIEJPT0xFQU4gICAgICAgICAgICAgICAgICAgRGF0YUxlbmd0aDI2 Ow0KKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICBBZG1hTWF4RGF0YVBlckxpbmU7DQorICBV SU5UMzIgICAgICAgICAgICAgICAgICAgIERlc2NTaXplOw0KKyAgVk9JRCAgICAgICAgICAgICAg ICAgICAgICAqQWRtYURlc2M7DQorDQorICBBZGRyZXNzaW5nTW9kZTY0ICAgPSBGQUxTRTsNCisg IERhdGFMZW5ndGgyNiAgICAgICA9IEZBTFNFOw0KKyAgQWRtYU1heERhdGFQZXJMaW5lID0gQURN QV9NQVhfREFUQV9QRVJfTElORV8xNkI7DQorICBEZXNjU2l6ZSAgICAgICAgICAgPSBzaXplb2Yg KFNEX01NQ19IQ19BRE1BXzMyX0RFU0NfTElORSk7DQorICBBZG1hRGVzYyAgICAgICAgICAgPSBO VUxMOw0KDQogICBEYXRhICAgID0gVHJiLT5EYXRhUGh5Ow0KICAgRGF0YUxlbiA9IFRyYi0+RGF0 YUxlbjsNCiAgIFBjaUlvICAgPSBUcmItPlByaXZhdGUtPlBjaUlvOw0KKw0KICAgLy8NCi0gIC8v IE9ubHkgc3VwcG9ydCAzMmJpdCBBRE1BIERlc2NyaXB0b3IgVGFibGUNCisgIC8vIERldGVjdCB3 aGV0aGVyIDY0Yml0IGFkZHJlc3NpbmcgaXMgc3VwcG9ydGVkLg0KICAgLy8NCi0gIGlmICgoRGF0 YSA+PSAweDEwMDAwMDAwMHVsKSB8fCAoKERhdGEgKyBEYXRhTGVuKSA+IDB4MTAwMDAwMDAwdWwp KSB7DQorICBpZiAoQ29udHJvbGxlclZlciA+PSBTRF9NTUNfSENfQ1RSTF9WRVJfNDAwKSB7DQor ICAgIFN0YXR1cyA9IFNkTW1jSGNDaGVja01taW9TZXQoUGNpSW8sIFRyYi0+U2xvdCwgU0RfTU1D X0hDX0hPU1RfQ1RSTDIsIHNpemVvZihVSU5UMTYpLA0KKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFNEX01NQ19IQ19WNF9FTnxTRF9NTUNfSENfNjRfQUREUl9FTiwgU0RfTU1DX0hD X1Y0X0VOfFNEX01NQ19IQ182NF9BRERSX0VOKTsNCisgICAgaWYgKCFFRklfRVJST1IgKFN0YXR1 cykpIHsNCisgICAgICBBZGRyZXNzaW5nTW9kZTY0ID0gVFJVRTsNCisgICAgICBEZXNjU2l6ZSA9 IHNpemVvZiAoU0RfTU1DX0hDX0FETUFfNjRfREVTQ19MSU5FKTsNCisgICAgfQ0KKyAgfQ0KKyAg Ly8NCisgIC8vIENoZWNrIGZvciB2YWxpZCByYW5nZXMgaW4gMzJiaXQgQURNQSBEZXNjcmlwdG9y IFRhYmxlDQorICAvLw0KKyAgaWYgKCFBZGRyZXNzaW5nTW9kZTY0ICYmDQorICAgICAgKChEYXRh ID49IDB4MTAwMDAwMDAwdWwpIHx8ICgoRGF0YSArIERhdGFMZW4pID4gMHgxMDAwMDAwMDB1bCkp KSB7DQogICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQogICB9DQogICAvLw0KLSAg Ly8gQWRkcmVzcyBmaWVsZCBzaGFsbCBiZSBzZXQgb24gMzItYml0IGJvdW5kYXJ5IChMb3dlciAy LWJpdCBpcyBhbHdheXMgc2V0IHRvIDApDQotICAvLyBmb3IgMzItYml0IGFkZHJlc3MgZGVzY3Jp cHRvciB0YWJsZS4NCisgIC8vIENoZWNrIGFkZHJlc3MgZmllbGQgYWxpZ25tZW50DQogICAvLw0K LSAgaWYgKChEYXRhICYgKEJJVDAgfCBCSVQxKSkgIT0gMCkgew0KLSAgICBERUJVRyAoKERFQlVH X0lORk8sICJUaGUgYnVmZmVyIFsweCV4XSB0byBjb25zdHJ1Y3QgQURNQSBkZXNjIGlzIG5vdCBh bGlnbmVkIHRvIDQgYnl0ZXMgYm91bmRhcnkhXG4iLCBEYXRhKSk7DQorICBpZiAoQWRkcmVzc2lu Z01vZGU2NCkgew0KKyAgICAvLw0KKyAgICAvLyBBZGRyZXNzIGZpZWxkIHNoYWxsIGJlIHNldCBv biA2NC1iaXQgYm91bmRhcnkgKExvd2VyIDMtYml0IGlzIGFsd2F5cyBzZXQgdG8gMCkNCisgICAg Ly8NCisgICAgaWYgKChEYXRhICYgKEJJVDAgfCBCSVQxIHwgQklUMikpICE9IDApIHsNCisgICAg ICBERUJVRyAoKERFQlVHX0lORk8sICJUaGUgYnVmZmVyIFsweCV4XSB0byBjb25zdHJ1Y3QgQURN QSBkZXNjIGlzIG5vdCBhbGlnbmVkIHRvIDggYnl0ZXMgYm91bmRhcnkhXG4iLCBEYXRhKSk7DQor ICAgIH0NCisgIH0gZWxzZSB7DQorICAgIC8vDQorICAgIC8vIEFkZHJlc3MgZmllbGQgc2hhbGwg YmUgc2V0IG9uIDMyLWJpdCBib3VuZGFyeSAoTG93ZXIgMi1iaXQgaXMgYWx3YXlzIHNldCB0byAw KQ0KKyAgICAvLw0KKyAgICBpZiAoKERhdGEgJiAoQklUMCB8IEJJVDEpKSAhPSAwKSB7DQorICAg ICAgREVCVUcgKChERUJVR19JTkZPLCAiVGhlIGJ1ZmZlciBbMHgleF0gdG8gY29uc3RydWN0IEFE TUEgZGVzYyBpcyBub3QgYWxpZ25lZCB0byA0IGJ5dGVzIGJvdW5kYXJ5IVxuIiwgRGF0YSkpOw0K KyAgICB9DQorICB9DQorICAvLw0KKyAgLy8gRGV0ZWN0IHdoZXRoZXIgMjZiaXQgZGF0YSBsZW5n dGggaXMgc3VwcG9ydGVkLg0KKyAgLy8NCisgIFN0YXR1cyA9IFNkTW1jSGNDaGVja01taW9TZXQo UGNpSW8sIFRyYi0+U2xvdCwgU0RfTU1DX0hDX0hPU1RfQ1RSTDIsIHNpemVvZihVSU5UMTYpLA0K KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRF9NTUNfSENfMjZfREFUQV9MRU5fQURN QV9FTiwgU0RfTU1DX0hDXzI2X0RBVEFfTEVOX0FETUFfRU4pOw0KKyAgaWYgKCFFRklfRVJST1Ig KFN0YXR1cykpIHsNCisgICAgRGF0YUxlbmd0aDI2ID0gVFJVRTsNCisgICAgQWRtYU1heERhdGFQ ZXJMaW5lID0gQURNQV9NQVhfREFUQV9QRVJfTElORV8yNkI7DQogICB9DQoNCi0gIEVudHJpZXMg ICA9IERpdlU2NHgzMiAoKERhdGFMZW4gKyBBRE1BX01BWF9EQVRBX1BFUl9MSU5FIC0gMSksIEFE TUFfTUFYX0RBVEFfUEVSX0xJTkUpOw0KLSAgVGFibGVTaXplID0gKFVJTlROKU11bHRVNjR4MzIg KEVudHJpZXMsIHNpemVvZiAoU0RfTU1DX0hDX0FETUFfREVTQ19MSU5FKSk7DQorICBFbnRyaWVz ICAgPSBEaXZVNjR4MzIgKChEYXRhTGVuICsgQWRtYU1heERhdGFQZXJMaW5lIC0gMSksIEFkbWFN YXhEYXRhUGVyTGluZSk7DQorICBUYWJsZVNpemUgPSAoVUlOVE4pTXVsdFU2NHgzMiAoRW50cmll cywgRGVzY1NpemUpOw0KICAgVHJiLT5BZG1hUGFnZXMgPSAoVUlOVDMyKUVGSV9TSVpFX1RPX1BB R0VTIChUYWJsZVNpemUpOw0KICAgU3RhdHVzID0gUGNpSW8tPkFsbG9jYXRlQnVmZmVyICgNCiAg ICAgICAgICAgICAgICAgICAgIFBjaUlvLA0KICAgICAgICAgICAgICAgICAgICAgQWxsb2NhdGVB bnlQYWdlcywNCiAgICAgICAgICAgICAgICAgICAgIEVmaUJvb3RTZXJ2aWNlc0RhdGEsDQogICAg ICAgICAgICAgICAgICAgICBFRklfU0laRV9UT19QQUdFUyAoVGFibGVTaXplKSwNCi0gICAgICAg ICAgICAgICAgICAgIChWT0lEICoqKSZUcmItPkFkbWFEZXNjLA0KKyAgICAgICAgICAgICAgICAg ICAgKFZPSUQgKiopJkFkbWFEZXNjLA0KICAgICAgICAgICAgICAgICAgICAgMA0KICAgICAgICAg ICAgICAgICAgICAgKTsNCiAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCiAgICAgcmV0dXJu IEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KICAgfQ0KLSAgWmVyb01lbSAoVHJiLT5BZG1hRGVzYywg VGFibGVTaXplKTsNCisgIFplcm9NZW0gKEFkbWFEZXNjLCBUYWJsZVNpemUpOw0KICAgQnl0ZXMg ID0gVGFibGVTaXplOw0KICAgU3RhdHVzID0gUGNpSW8tPk1hcCAoDQogICAgICAgICAgICAgICAg ICAgICBQY2lJbywNCiAgICAgICAgICAgICAgICAgICAgIEVmaVBjaUlvT3BlcmF0aW9uQnVzTWFz dGVyQ29tbW9uQnVmZmVyLA0KLSAgICAgICAgICAgICAgICAgICAgVHJiLT5BZG1hRGVzYywNCisg ICAgICAgICAgICAgICAgICAgIEFkbWFEZXNjLA0KICAgICAgICAgICAgICAgICAgICAgJkJ5dGVz LA0KICAgICAgICAgICAgICAgICAgICAgJlRyYi0+QWRtYURlc2NQaHksDQogICAgICAgICAgICAg ICAgICAgICAmVHJiLT5BZG1hTWFwDQpAQCAtMTIzOSwxMiArMTQ2OCwxMyBAQCBCdWlsZEFkbWFE ZXNjVGFibGUgKA0KICAgICBQY2lJby0+RnJlZUJ1ZmZlciAoDQogICAgICAgICAgICAgIFBjaUlv LA0KICAgICAgICAgICAgICBFRklfU0laRV9UT19QQUdFUyAoVGFibGVTaXplKSwNCi0gICAgICAg ICAgICAgVHJiLT5BZG1hRGVzYw0KKyAgICAgICAgICAgICBBZG1hRGVzYw0KICAgICAgICAgICAg ICApOw0KICAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQogICB9DQoNCi0gIGlmICgo VUlOVDY0KShVSU5UTilUcmItPkFkbWFEZXNjUGh5ID4gMHgxMDAwMDAwMDB1bCkgew0KKyAgaWYg KCghQWRkcmVzc2luZ01vZGU2NCkgJiYNCisgICAgICAoVUlOVDY0KShVSU5UTilUcmItPkFkbWFE ZXNjUGh5ID4gMHgxMDAwMDAwMDB1bCkgew0KICAgICAvLw0KICAgICAvLyBUaGUgQURNQSBkb2Vz bid0IHN1cHBvcnQgNjRiaXQgYWRkcmVzc2luZy4NCiAgICAgLy8NCkBAIC0xMjU1LDM1ICsxNDg1 LDcxIEBAIEJ1aWxkQWRtYURlc2NUYWJsZSAoDQogICAgIFBjaUlvLT5GcmVlQnVmZmVyICgNCiAg ICAgICBQY2lJbywNCiAgICAgICBFRklfU0laRV9UT19QQUdFUyAoVGFibGVTaXplKSwNCi0gICAg ICBUcmItPkFkbWFEZXNjDQorICAgICAgQWRtYURlc2MNCiAgICAgKTsNCiAgICAgcmV0dXJuIEVG SV9ERVZJQ0VfRVJST1I7DQogICB9DQoNCiAgIFJlbWFpbmluZyA9IERhdGFMZW47DQotICBBZGRy ZXNzICAgPSAoVUlOVDMyKURhdGE7DQorICBBZGRyZXNzICAgPSBEYXRhOw0KKyAgaWYgKCFBZGRy ZXNzaW5nTW9kZTY0KSB7DQorICAgIFRyYi0+QWRtYTMyRGVzYyA9IEFkbWFEZXNjOw0KKyAgICBU cmItPkFkbWE2NERlc2MgPSBOVUxMOw0KKyAgfSBlbHNlIHsNCisgICAgVHJiLT5BZG1hNjREZXNj ID0gQWRtYURlc2M7DQorICAgIFRyYi0+QWRtYTMyRGVzYyA9IE5VTEw7DQorICB9DQogICBmb3Ig KEluZGV4ID0gMDsgSW5kZXggPCBFbnRyaWVzOyBJbmRleCsrKSB7DQotICAgIGlmIChSZW1haW5p bmcgPD0gQURNQV9NQVhfREFUQV9QRVJfTElORSkgew0KLSAgICAgIFRyYi0+QWRtYURlc2NbSW5k ZXhdLlZhbGlkID0gMTsNCi0gICAgICBUcmItPkFkbWFEZXNjW0luZGV4XS5BY3QgICA9IDI7DQot ICAgICAgVHJiLT5BZG1hRGVzY1tJbmRleF0uTGVuZ3RoICA9IChVSU5UMTYpUmVtYWluaW5nOw0K LSAgICAgIFRyYi0+QWRtYURlc2NbSW5kZXhdLkFkZHJlc3MgPSBBZGRyZXNzOw0KLSAgICAgIGJy ZWFrOw0KKyAgICBpZiAoIUFkZHJlc3NpbmdNb2RlNjQpIHsNCisgICAgICBpZiAoUmVtYWluaW5n IDw9IEFkbWFNYXhEYXRhUGVyTGluZSkgew0KKyAgICAgICAgVHJiLT5BZG1hMzJEZXNjW0luZGV4 XS5WYWxpZCA9IDE7DQorICAgICAgICBUcmItPkFkbWEzMkRlc2NbSW5kZXhdLkFjdCAgID0gMjsN CisgICAgICAgIGlmIChEYXRhTGVuZ3RoMjYpIHsNCisgICAgICAgICAgVHJiLT5BZG1hMzJEZXNj W0luZGV4XS5VcHBlckxlbmd0aCA9IChVSU5UMTYpUlNoaWZ0VTY0IChSZW1haW5pbmcsIDE2KTsN CisgICAgICAgIH0NCisgICAgICAgIFRyYi0+QWRtYTMyRGVzY1tJbmRleF0uTG93ZXJMZW5ndGgg PSAoVUlOVDE2KShSZW1haW5pbmcgJiBNQVhfVUlOVDE2KTsNCisgICAgICAgIFRyYi0+QWRtYTMy RGVzY1tJbmRleF0uQWRkcmVzcyA9IChVSU5UMzIpQWRkcmVzczsNCisgICAgICAgIGJyZWFrOw0K KyAgICAgIH0gZWxzZSB7DQorICAgICAgICBUcmItPkFkbWEzMkRlc2NbSW5kZXhdLlZhbGlkID0g MTsNCisgICAgICAgIFRyYi0+QWRtYTMyRGVzY1tJbmRleF0uQWN0ICAgPSAyOw0KKyAgICAgICAg aWYgKERhdGFMZW5ndGgyNikgew0KKyAgICAgICAgICBUcmItPkFkbWEzMkRlc2NbSW5kZXhdLlVw cGVyTGVuZ3RoICA9IDA7DQorICAgICAgICB9DQorICAgICAgICBUcmItPkFkbWEzMkRlc2NbSW5k ZXhdLkxvd2VyTGVuZ3RoICA9IDA7DQorICAgICAgICBUcmItPkFkbWEzMkRlc2NbSW5kZXhdLkFk ZHJlc3MgPSAoVUlOVDMyKUFkZHJlc3M7DQorICAgICAgfQ0KICAgICB9IGVsc2Ugew0KLSAgICAg IFRyYi0+QWRtYURlc2NbSW5kZXhdLlZhbGlkID0gMTsNCi0gICAgICBUcmItPkFkbWFEZXNjW0lu ZGV4XS5BY3QgICA9IDI7DQotICAgICAgVHJiLT5BZG1hRGVzY1tJbmRleF0uTGVuZ3RoICA9IDA7 DQotICAgICAgVHJiLT5BZG1hRGVzY1tJbmRleF0uQWRkcmVzcyA9IEFkZHJlc3M7DQorICAgICAg aWYgKFJlbWFpbmluZyA8PSBBZG1hTWF4RGF0YVBlckxpbmUpIHsNCisgICAgICAgIFRyYi0+QWRt YTY0RGVzY1tJbmRleF0uVmFsaWQgPSAxOw0KKyAgICAgICAgVHJiLT5BZG1hNjREZXNjW0luZGV4 XS5BY3QgICA9IDI7DQorICAgICAgICBpZiAoRGF0YUxlbmd0aDI2KSB7DQorICAgICAgICAgIFRy Yi0+QWRtYTY0RGVzY1tJbmRleF0uVXBwZXJMZW5ndGggID0gKFVJTlQxNilSU2hpZnRVNjQgKFJl bWFpbmluZywgMTYpOw0KKyAgICAgICAgfQ0KKyAgICAgICAgVHJiLT5BZG1hNjREZXNjW0luZGV4 XS5Mb3dlckxlbmd0aCAgPSAoVUlOVDE2KShSZW1haW5pbmcgJiBNQVhfVUlOVDE2KTsNCisgICAg ICAgIFRyYi0+QWRtYTY0RGVzY1tJbmRleF0uTG93ZXJBZGRyZXNzID0gKFVJTlQzMilBZGRyZXNz Ow0KKyAgICAgICAgVHJiLT5BZG1hNjREZXNjW0luZGV4XS5VcHBlckFkZHJlc3MgPSAoVUlOVDMy KVJTaGlmdFU2NCAoQWRkcmVzcywgMzIpOw0KKyAgICAgICAgYnJlYWs7DQorICAgICAgfSBlbHNl IHsNCisgICAgICAgIFRyYi0+QWRtYTY0RGVzY1tJbmRleF0uVmFsaWQgPSAxOw0KKyAgICAgICAg VHJiLT5BZG1hNjREZXNjW0luZGV4XS5BY3QgICA9IDI7DQorICAgICAgICBpZiAoRGF0YUxlbmd0 aDI2KSB7DQorICAgICAgICAgIFRyYi0+QWRtYTY0RGVzY1tJbmRleF0uVXBwZXJMZW5ndGggID0g MDsNCisgICAgICAgIH0NCisgICAgICAgIFRyYi0+QWRtYTY0RGVzY1tJbmRleF0uTG93ZXJMZW5n dGggID0gMDsNCisgICAgICAgIFRyYi0+QWRtYTY0RGVzY1tJbmRleF0uTG93ZXJBZGRyZXNzID0g KFVJTlQzMilBZGRyZXNzOw0KKyAgICAgICAgVHJiLT5BZG1hNjREZXNjW0luZGV4XS5VcHBlckFk ZHJlc3MgPSAoVUlOVDMyKVJTaGlmdFU2NCAoQWRkcmVzcywgMzIpOw0KKyAgICAgIH0NCiAgICAg fQ0KDQotICAgIFJlbWFpbmluZyAtPSBBRE1BX01BWF9EQVRBX1BFUl9MSU5FOw0KLSAgICBBZGRy ZXNzICAgKz0gQURNQV9NQVhfREFUQV9QRVJfTElORTsNCisgICAgUmVtYWluaW5nIC09IEFkbWFN YXhEYXRhUGVyTGluZTsNCisgICAgQWRkcmVzcyAgICs9IEFkbWFNYXhEYXRhUGVyTGluZTsNCiAg IH0NCg0KICAgLy8NCiAgIC8vIFNldCB0aGUgbGFzdCBkZXNjcmlwdG9yIGxpbmUgYXMgZW5kIG9m IGRlc2NyaXB0b3IgdGFibGUNCiAgIC8vDQotICBUcmItPkFkbWFEZXNjW0luZGV4XS5FbmQgPSAx Ow0KKyAgQWRkcmVzc2luZ01vZGU2NCA/IChUcmItPkFkbWE2NERlc2NbSW5kZXhdLkVuZCA9IDEp IDogKFRyYi0+QWRtYTMyRGVzY1tJbmRleF0uRW5kID0gMSk7DQogICByZXR1cm4gRUZJX1NVQ0NF U1M7DQp9DQoNCkBAIC0xMzgxLDcgKzE2NDcsNyBAQCBTZE1tY0NyZWF0ZVRyYiAoDQogICAgICAg VHJiLT5Nb2RlID0gU2RNbWNOb0RhdGE7DQogICAgIH0gZWxzZSBpZiAoUHJpdmF0ZS0+Q2FwYWJp bGl0eVtTbG90XS5BZG1hMiAhPSAwKSB7DQogICAgICAgVHJiLT5Nb2RlID0gU2RNbWNBZG1hTW9k ZTsNCi0gICAgICBTdGF0dXMgPSBCdWlsZEFkbWFEZXNjVGFibGUgKFRyYik7DQorICAgICAgU3Rh dHVzID0gQnVpbGRBZG1hRGVzY1RhYmxlIChUcmIsIFByaXZhdGUtPkNvbnRyb2xsZXJWZXJzaW9u W1Nsb3RdKTsNCiAgICAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQogICAgICAgICBQY2lJ by0+VW5tYXAgKFBjaUlvLCBUcmItPkRhdGFNYXApOw0KICAgICAgICAgZ290byBFcnJvcjsNCkBA IC0xNDI3LDExICsxNjkzLDE4IEBAIFNkTW1jRnJlZVRyYiAoDQogICAgICAgVHJiLT5BZG1hTWFw DQogICAgICk7DQogICB9DQotICBpZiAoVHJiLT5BZG1hRGVzYyAhPSBOVUxMKSB7DQorICBpZiAo VHJiLT5BZG1hMzJEZXNjICE9IE5VTEwpIHsNCisgICAgUGNpSW8tPkZyZWVCdWZmZXIgKA0KKyAg ICAgIFBjaUlvLA0KKyAgICAgIFRyYi0+QWRtYVBhZ2VzLA0KKyAgICAgIFRyYi0+QWRtYTMyRGVz Yw0KKyAgICApOw0KKyAgfQ0KKyAgaWYgKFRyYi0+QWRtYTY0RGVzYyAhPSBOVUxMKSB7DQogICAg IFBjaUlvLT5GcmVlQnVmZmVyICgNCiAgICAgICBQY2lJbywNCiAgICAgICBUcmItPkFkbWFQYWdl cywNCi0gICAgICBUcmItPkFkbWFEZXNjDQorICAgICAgVHJiLT5BZG1hNjREZXNjDQogICAgICk7 DQogICB9DQogICBpZiAoVHJiLT5EYXRhTWFwICE9IE5VTEwpIHsNCkBAIC0xNTcxLDEyICsxODQ0 LDE1IEBAIFNkTW1jRXhlY1RyYiAoDQogICBVSU5UMTYgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBDbWQ7DQogICBVSU5UMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRTdGF0 dXM7DQogICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmd1bWVudDsNCi0g IFVJTlQxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJsa0NvdW50Ow0KKyAgVUlOVDMy ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmxrQ291bnQ7DQogICBVSU5UMTYgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBCbGtTaXplOw0KICAgVUlOVDE2ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgVHJhbnNNb2RlOw0KICAgVUlOVDggICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgSG9zdEN0cmwxOw0KLSAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgU2RtYUFkZHI7DQorICBVSU5UNjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZG1h QWRkcjsNCiAgIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkbWFBZGRyOw0K KyAgQk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzc2luZ01vZGU2NDsN CisNCisgIEFkZHJlc3NpbmdNb2RlNjQgPSBGQUxTRTsNCg0KICAgUGFja2V0ID0gVHJiLT5QYWNr ZXQ7DQogICBQY2lJbyAgPSBUcmItPlByaXZhdGUtPlBjaUlvOw0KQEAgLTE2MDksMTMgKzE4ODUs MjggQEAgU2RNbWNFeGVjVHJiICgNCg0KICAgU2RNbWNIY0xlZE9uT2ZmIChQY2lJbywgVHJiLT5T bG90LCBUUlVFKTsNCg0KKyAgaWYgKFByaXZhdGUtPkNvbnRyb2xsZXJWZXJzaW9uW1RyYi0+U2xv dF0gPj0gU0RfTU1DX0hDX0NUUkxfVkVSXzQwMCkgew0KKyAgICBTdGF0dXMgPSBTZE1tY0hjQ2hl Y2tNbWlvU2V0KFBjaUlvLCBUcmItPlNsb3QsIFNEX01NQ19IQ19IT1NUX0NUUkwyLCBzaXplb2Yo VUlOVDE2KSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRF9NTUNfSENfVjRf RU58U0RfTU1DX0hDXzY0X0FERFJfRU4sIFNEX01NQ19IQ19WNF9FTnxTRF9NTUNfSENfNjRfQURE Ul9FTik7DQorICAgIGlmICghRUZJX0VSUk9SIChTdGF0dXMpKSB7DQorICAgICAgQWRkcmVzc2lu Z01vZGU2NCA9IFRSVUU7DQorICAgIH0NCisgIH0NCisNCiAgIGlmIChUcmItPk1vZGUgPT0gU2RN bWNTZG1hTW9kZSkgew0KLSAgICBpZiAoKFVJTlQ2NCkoVUlOVE4pVHJiLT5EYXRhUGh5ID49IDB4 MTAwMDAwMDAwdWwpIHsNCisgICAgaWYgKCghQWRkcmVzc2luZ01vZGU2NCkgJiYNCisgICAgICAg ICgoVUlOVDY0KShVSU5UTilUcmItPkRhdGFQaHkgPj0gMHgxMDAwMDAwMDB1bCkpIHsNCiAgICAg ICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KICAgICB9DQoNCi0gICAgU2RtYUFkZHIg PSAoVUlOVDMyKShVSU5UTilUcmItPkRhdGFQaHk7DQotICAgIFN0YXR1cyAgID0gU2RNbWNIY1J3 TW1pbyAoUGNpSW8sIFRyYi0+U2xvdCwgU0RfTU1DX0hDX1NETUFfQUREUiwgRkFMU0UsIHNpemVv ZiAoU2RtYUFkZHIpLCAmU2RtYUFkZHIpOw0KKyAgICBTZG1hQWRkciA9IChVSU5UNjQpKFVJTlRO KVRyYi0+RGF0YVBoeTsNCisNCisgICAgaWYgKFByaXZhdGUtPkNvbnRyb2xsZXJWZXJzaW9uW1Ry Yi0+U2xvdF0gPj0gU0RfTU1DX0hDX0NUUkxfVkVSXzQwMCkgew0KKyAgICAgIFN0YXR1cyA9IFNk TW1jSGNSd01taW8gKFBjaUlvLCBUcmItPlNsb3QsIFNEX01NQ19IQ19BRE1BX1NZU19BRERSLCBG QUxTRSwgc2l6ZW9mIChVSU5UNjQpLCAmU2RtYUFkZHIpOw0KKyAgICB9IGVsc2Ugew0KKyAgICAg IFN0YXR1cyA9IFNkTW1jSGNSd01taW8gKFBjaUlvLCBUcmItPlNsb3QsIFNEX01NQ19IQ19TRE1B X0FERFIsIEZBTFNFLCBzaXplb2YgKFVJTlQzMiksICZTZG1hQWRkcik7DQorICAgIH0NCisNCiAg ICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KICAgICAgIHJldHVybiBTdGF0dXM7DQogICAg IH0NCkBAIC0xNjQ1LDkgKzE5MzYsMTMgQEAgU2RNbWNFeGVjVHJiICgNCiAgICAgLy8NCiAgICAg Ly8gQ2FsY3VhdGUgQmxvY2sgQ291bnQuDQogICAgIC8vDQotICAgIEJsa0NvdW50ID0gKFVJTlQx NikoVHJiLT5EYXRhTGVuIC8gVHJiLT5CbG9ja1NpemUpOw0KKyAgICBCbGtDb3VudCA9IChUcmIt PkRhdGFMZW4gLyBUcmItPkJsb2NrU2l6ZSk7DQorICB9DQorICBpZiAoUHJpdmF0ZS0+Q29udHJv bGxlclZlcnNpb25bVHJiLT5TbG90XSA+PSBTRF9NTUNfSENfQ1RSTF9WRVJfNDEwKSB7DQorICAg IFN0YXR1cyA9IFNkTW1jSGNSd01taW8gKFBjaUlvLCBUcmItPlNsb3QsIFNEX01NQ19IQ19TRE1B X0FERFIsIEZBTFNFLCBzaXplb2YgKFVJTlQzMiksICZCbGtDb3VudCk7DQorICB9IGVsc2Ugew0K KyAgICBTdGF0dXMgPSBTZE1tY0hjUndNbWlvIChQY2lJbywgVHJiLT5TbG90LCBTRF9NTUNfSENf QkxLX0NPVU5ULCBGQUxTRSwgc2l6ZW9mIChVSU5UMTYpLCAmQmxrQ291bnQpOw0KICAgfQ0KLSAg U3RhdHVzICAgPSBTZE1tY0hjUndNbWlvIChQY2lJbywgVHJiLT5TbG90LCBTRF9NTUNfSENfQkxL X0NPVU5ULCBGQUxTRSwgc2l6ZW9mIChCbGtDb3VudCksICZCbGtDb3VudCk7DQogICBpZiAoRUZJ X0VSUk9SIChTdGF0dXMpKSB7DQogICAgIHJldHVybiBTdGF0dXM7DQogICB9DQpAQCAtMTc0Myw3 ICsyMDM4LDcgQEAgU2RNbWNDaGVja1RyYlJlc3VsdCAoDQogICBFRklfU0RfTU1DX1BBU1NfVEhS VV9DT01NQU5EX1BBQ0tFVCAqUGFja2V0Ow0KICAgVUlOVDE2ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgSW50U3RhdHVzOw0KICAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUmVzcG9uc2VbNF07DQotICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBT ZG1hQWRkcjsNCisgIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNkbWFBZGRy Ow0KICAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXg7DQogICBVSU5U OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTd1Jlc2V0Ow0KICAgVUlOVDMyICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUGlvTGVuZ3RoOw0KQEAgLTE4NjcsOCArMjE2MiwxOSBA QCBTZE1tY0NoZWNrVHJiUmVzdWx0ICgNCiAgICAgLy8NCiAgICAgLy8gVXBkYXRlIFNETUEgQWRk cmVzcyByZWdpc3Rlci4NCiAgICAgLy8NCi0gICAgU2RtYUFkZHIgPSBTRF9NTUNfU0RNQV9ST1VO RF9VUCAoKFVJTlQzMikoVUlOVE4pVHJiLT5EYXRhUGh5LCBTRF9NTUNfU0RNQV9CT1VOREFSWSk7 DQotICAgIFN0YXR1cyAgID0gU2RNbWNIY1J3TW1pbyAoDQorICAgIFNkbWFBZGRyID0gU0RfTU1D X1NETUFfUk9VTkRfVVAgKChVSU5UTilUcmItPkRhdGFQaHksIFNEX01NQ19TRE1BX0JPVU5EQVJZ KTsNCisNCisgICAgaWYgKFByaXZhdGUtPkNvbnRyb2xsZXJWZXJzaW9uW1RyYi0+U2xvdF0gPj0g U0RfTU1DX0hDX0NUUkxfVkVSXzQwMCkgew0KKyAgICAgIFN0YXR1cyA9IFNkTW1jSGNSd01taW8g KA0KKyAgICAgICAgICAgICAgICAgUHJpdmF0ZS0+UGNpSW8sDQorICAgICAgICAgICAgICAgICBU cmItPlNsb3QsDQorICAgICAgICAgICAgICAgICBTRF9NTUNfSENfQURNQV9TWVNfQUREUiwNCisg ICAgICAgICAgICAgICAgIEZBTFNFLA0KKyAgICAgICAgICAgICAgICAgc2l6ZW9mIChVSU5UNjQp LA0KKyAgICAgICAgICAgICAgICAgJlNkbWFBZGRyDQorICAgICAgICAgICAgICAgICApOw0KKyAg ICB9IGVsc2Ugew0KKyAgICAgIFN0YXR1cyA9IFNkTW1jSGNSd01taW8gKA0KICAgICAgICAgICAg ICAgICAgUHJpdmF0ZS0+UGNpSW8sDQogICAgICAgICAgICAgICAgICBUcmItPlNsb3QsDQogICAg ICAgICAgICAgICAgICBTRF9NTUNfSENfU0RNQV9BRERSLA0KQEAgLTE4NzYsMTAgKzIxODIsMTIg QEAgU2RNbWNDaGVja1RyYlJlc3VsdCAoDQogICAgICAgICAgICAgICAgICBzaXplb2YgKFVJTlQz MiksDQogICAgICAgICAgICAgICAgICAmU2RtYUFkZHINCiAgICAgICAgICAgICAgICAgICk7DQor ICAgIH0NCisNCiAgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KICAgICAgIGdvdG8gRG9u ZTsNCiAgICAgfQ0KLSAgICBUcmItPkRhdGFQaHkgPSAoVUlOVDMyKShVSU5UTilTZG1hQWRkcjsN CisgICAgVHJiLT5EYXRhUGh5ID0gKFVJTlQ2NCkoVUlOVE4pU2RtYUFkZHI7DQogICB9DQoNCiAg IGlmICgoUGFja2V0LT5TZE1tY0NtZEJsay0+Q29tbWFuZFR5cGUgIT0gU2RNbWNDb21tYW5kVHlw ZUFkdGMpICYmDQpAQCAtMjAwMCwyODEgKzIzMDgsMyBAQCBTZE1tY1dhaXRUcmJSZXN1bHQgKA0K ICAgcmV0dXJuIEVGSV9USU1FT1VUOw0KfQ0KDQotQk9PTEVBTiBCaHRIb3N0UGNpU3VwcG9ydChF RklfUENJX0lPX1BST1RPQ09MICpQY2lJbykNCi17DQotICAgICAgICAgICAgICBQQ0lfVFlQRTAw ICAgICAgICAgICAgICAgICAgICAgICAgIFBjaTsNCi0NCi0gICAgICAgICAgICAgIFBjaUlvLT5Q Y2kuUmVhZCAoUGNpSW8sIEVmaVBjaUlvV2lkdGhVaW50MzIsDQotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIHNpemVvZiBQ Y2kgLyBzaXplb2YgKFVJTlQzMiksICZQY2kpOw0KLQ0KLSAgICAgICAgICAgICAgREVCVUcgKChE RUJVR19JTkZPLCAiY2hlY2sgZGV2aWNlICUwNHg6JTA0eFxuIiwgUGNpLkhkci5WZW5kb3JJZCwg UGNpLkhkci5EZXZpY2VJZCkpOw0KLQ0KLSAgICAgICAgICAgICAgaWYgKFBjaS5IZHIuVmVuZG9y SWQgIT0gMHgxMjE3KQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZW5kOw0K LQ0KLSAgICAgICAgICAgICAgc3dpdGNoIChQY2kuSGRyLkRldmljZUlkKQ0KLSAgICAgICAgICAg ICAgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHg4NDIwOiAgICAgICAv L1BDSV9ERVZfSURfU0RTMA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHg4 NDIxOiAgICAgICAvL1BDSV9ERVZfSURfU0RTMQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNhc2UgMHg4NTIwOiAgICAgICAvL1BDSV9ERVZfSURfRkoyDQotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY2FzZSAweDg2MjA6ICAgICAgIC8vUENJX0RFVl9JRF9TQjANCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4ODYyMTogICAgICAgLy9QQ0lfREVWX0lE X1NCMQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX2Rl dmljZUlkID0gUGNpLkhkci5EZXZpY2VJZDsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZGVmYXVsdDoNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgYnJlYWs7DQotICAgICAgICAgICAgICB9DQotDQotICAgICAgICAgICAgICBlbmQ6DQotICAg ICAgICAgICAgICByZXR1cm4gMDsNCi19DQotDQotdm9pZCBEYmdOdWxsKElOIENPTlNUIENIQVIx NiAqIGZtdCwgLi4uKQ0KLXsNCi19DQotDQotVUlOVDMyIGJodF9yZWFkbChFRklfUENJX0lPX1BS T1RPQ09MICpQY2lJbywgVUlOVDMyIG9mZnNldCkNCi17DQotICAgICAgICAgICAgICBVSU5UMzIg YXJnOw0KLSAgICAgICAgICAgICAgUGNpSW8tPk1lbS5SZWFkKFBjaUlvLEVmaVBjaUlvV2lkdGhV aW50MzIsMSxvZmZzZXQsMSwmYXJnKTsNCi0gICAgICAgICAgICAgIHJldHVybiBhcmc7DQotfQ0K LQ0KLXZvaWQgYmh0X3dyaXRlbChFRklfUENJX0lPX1BST1RPQ09MICpQY2lJbywgVUlOVDMyIG9m ZnNldCwgVUlOVDMyIHZhbHVlKQ0KLXsNCi0gICAgICAgICAgICAgIFBjaUlvLT5NZW0uV3JpdGUo UGNpSW8sRWZpUGNpSW9XaWR0aFVpbnQzMiwxLG9mZnNldCwxLCZ2YWx1ZSk7DQotfQ0KLQ0KLQ0K LVVJTlQzMiBQY2lCaHRSZWFkMzIoRUZJX1BDSV9JT19QUk9UT0NPTCAqUGNpSW8sIFVJTlQzMiBv ZmZzZXQpDQotew0KLSAgICAgICAgICAgICAgVUlOVDMyIGkgPSAwOw0KLSAgICAgICAgICAgICAg VUlOVDMyIHRtcFszXSA9IHswfTsNCi0NCi0gICAgICAgICAgICAgIGlmKChnX2RldmljZUlkID09 IFBDSV9ERVZfSURfU0RTMCkgfHwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKGdfZGV2aWNlSWQgPT0gUENJX0RFVl9JRF9TRFMxKSB8fA0KLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ19kZXZpY2VJZCA9PSBQQ0lf REVWX0lEX0ZKMikgfHwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKGdfZGV2aWNlSWQgPT0gUENJX0RFVl9JRF9TQjApIHx8DQotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnX2RldmljZUlkID09IFBDSV9ERVZfSURf U0IxKSkNCi0gICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv LyBGb3IgU2FuZHN0b3JtLCBIVyBpbXBsZW1lbnQgYSBtYXBwaW5nIG1ldGhvZCBieSBtZW1vcnkg c3BhY2UgcmVnIHRvIGFjY2VzcyBQQ0kgcmVnLg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8vIEVuYWJsZSBtYXBwaW5nDQotDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Ly8gQ2hlY2sgZnVuY3Rpb24gY29uZmxpY3QNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpZigoZ19kZXZpY2VJZCA9PSBQQ0lfREVWX0lEX1NEUzApIHx8DQotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ19kZXZpY2VJ ZCA9PSBQQ0lfREVWX0lEX0ZKMikgfHwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnX2RldmljZUlkID09IFBDSV9ERVZfSURf U0IwKSB8fA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKGdfZGV2aWNlSWQgPT0gUENJX0RFVl9JRF9TQjEpKQ0KLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaSA9IDA7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGJodF93cml0ZWwoUGNpSW8sIEJIVF9QQ0lSTWFwcGluZ0VuLCAweDQwMDAw MDAwKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hp bGUoKGJodF9yZWFkbChQY2lJbywgQkhUX1BDSVJNYXBwaW5nRW4pICYgMHg0MDAwMDAwMCkgPT0g MCkNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaWYoaSA9PSA1KQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vRGJnTXNnKChE UklWRVJOQU1FICIgLSAlcygpIGZ1bmN0aW9uIDAgY2FuJ3QgbG9jayFcbiIsIF9fRlVOQ1RJT05f XykpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gUkRfRElTX01BUFBJTkc7DQotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9 DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdCUy0+U3RhbGwoMTAwMCk7 DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpKys7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmh0X3dyaXRlbChQY2lJbywgQkhU X1BDSVJNYXBwaW5nRW4sIDB4NDAwMDAwMDApOw0KLQ0KLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg fQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYoZ19kZXZpY2VJZCA9PSBQ Q0lfREVWX0lEX1NEUzEpDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gMDsNCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmh0X3dyaXRlbChQY2lJbywg QkhUX1BDSVJNYXBwaW5nRW4sIDB4MjAwMDAwMDApOw0KLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSgoYmh0X3JlYWRsKFBjaUlvLCBCSFRfUENJUk1h cHBpbmdFbikgJiAweDIwMDAwMDAwKSA9PSAwKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihpID09IDUpDQotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLy9EYmdFcnIoKERSSVZFUk5BTUUgIiAtICVzKCkgZnVuY3Rpb24gMSBj YW4ndCBsb2NrIVxuIiwgX19GVU5DVElPTl9fKSk7DQotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290 byBSRF9ESVNfTUFQUElORzsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdCUy0+U3RhbGwoMTAwMCk7DQotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpKys7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBiaHRfd3JpdGVsKFBjaUlvLCBCSFRfUENJUk1hcHBpbmdFbiwgMHgyMDAw MDAwMCk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0N Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQotDQotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLy8gQ2hlY2sgbGFzdCBvcGVyYXRpb24gaXMgY29tcGxldGUNCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpID0gMDsNCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB3aGlsZShiaHRfcmVhZGwoUGNpSW8sIEJIVF9QQ0lSTWFwcGluZ0N0bCkgJiAweGMwMDAw MDAwKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoaSA9PSA1KQ0KLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0RiZ0VycigoRFJJVkVS TkFNRSAiIC0gWzIwNF0gPSAweCV4XG4iLCBSZWdpc3RlclJlYWQzMihFTE5fZFBDSVJNYXBwaW5n Q3RsKSkpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLy9EYmdFcnIoKERSSVZFUk5BTUUgIiAtIFsyMDhdID0gMHgleFxuIiwg UmVnaXN0ZXJSZWFkMzIoRUxOX2RQQ0lSTWFwcGluZ0VuKSkpOw0KLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9EYmdFcnIoKERS SVZFUk5BTUUgIiAtICVzKCkgY2hlY2sgbGFzdCBvcGVyYXRpb24gY29tcGxldGUgdGltZW91dCEh IVxuIiwgX19GVU5DVElPTl9fKSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIFJEX0RJU19NQVBQSU5HOw0KLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdCUy0+U3RhbGwoMTAwMCk7DQotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgKz0gMTsNCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB9DQotDQotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLy8gU2V0IHJlZ2lzdGVyIGFkZHJlc3MNCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB0bXBbMF0gfD0gMHg0MDAwMDAwMDsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB0bXBbMF0gfD0gb2Zmc2V0Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJodF93 cml0ZWwoUGNpSW8sIEJIVF9QQ0lSTWFwcGluZ0N0bCwgdG1wWzBdKTsNCi0NCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayByZWFkIGlzIGNvbXBsZXRlDQotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaSA9IDA7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgd2hpbGUoYmh0X3JlYWRsKFBjaUlvLCBCSFRfUENJUk1hcHBpbmdDdGwpICYgMHg0MDAwMDAw MCkNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGkgPT0gNSkNCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9EYmdFcnIoKERSSVZFUk5B TUUgIiAtICVzKCkgY2hlY2sgcmVhZCBvcGVyYXRpb24gY29tcGxldGUgdGltZW91dCEhIVxuIiwg X19GVU5DVElPTl9fKSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBnb3RvIFJEX0RJU19NQVBQSU5HOw0KLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdCUy0+U3RhbGwoMTAwMCk7DQotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgKz0gMTsNCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB9DQotDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Ly8gR2V0IFBDSVIgdmFsdWUNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXBbMV0g PSBiaHRfcmVhZGwoUGNpSW8sIEJIVF9QQ0lSTWFwcGluZ1ZhbCk7DQotDQotUkRfRElTX01BUFBJ Tkc6DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGlzYWJsZSBtYXBwaW5nDQot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmh0X3dyaXRlbChQY2lJbywgQkhUX1BDSVJN YXBwaW5nRW4sIDB4ODAwMDAwMDApOw0KLQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8vRGJnRGVidWcoTCIlcyBvZmZzZXQ9JXggVmFsdWU6JXhcbiIsIF9fRlVOQ1RJT05fXywgb2Zm c2V0LCB0bXBbMV0pOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0bXBb MV07DQotICAgICAgICAgICAgICB9DQotDQotICAgICAgICAgICAgICAvL0RiZ0RlYnVnKEwiJXMg b2Zmc2V0PSV4IFZhbHVlOiV4XG4iLCBfX0ZVTkNUSU9OX18sIG9mZnNldCwgdG1wWzBdKTsNCi0g ICAgICAgICAgICAgIHJldHVybiB0bXBbMF07DQotfQ0KLQ0KLXZvaWQgUGNpQmh0V3JpdGUzMihF RklfUENJX0lPX1BST1RPQ09MICpQY2lJbywgVUlOVDMyIG9mZnNldCwgVUlOVDMyIHZhbHVlKQ0K LXsNCi0gICAgICAgICAgICAgIFVJTlQzMiB0bXAgPSAwOw0KLSAgICBVSU5UMzIgaSA9IDA7DQot DQotICAgICAgICAgICAgICBpZigoZ19kZXZpY2VJZCA9PSBQQ0lfREVWX0lEX1NEUzApIHx8DQot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnX2RldmljZUlk ID09IFBDSV9ERVZfSURfU0RTMSkgfHwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKGdfZGV2aWNlSWQgPT0gUENJX0RFVl9JRF9GSjIpIHx8DQotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnX2RldmljZUlkID09IFBD SV9ERVZfSURfU0IwKSB8fA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoZ19kZXZpY2VJZCA9PSBQQ0lfREVWX0lEX1NCMSkpDQotICAgIHsNCi0gICAgICAg IC8vIEZvciBTYW5kc3Rvcm0sIEhXIGltcGxlbWVudCBhIG1hcHBpbmcgbWV0aG9kIGJ5IG1lbW9y eSBzcGFjZSByZWcgdG8gYWNjZXNzIFBDSSByZWcuDQotICAgICAgICAvLyBVcHBlciBjYWxsZXIg ZG9lc24ndCBuZWVkIHRvIHNldCAweEQwLg0KLQ0KLSAgICAgICAgLy8gRW5hYmxlIG1hcHBpbmcN Ci0NCi0gICAgICAgIC8vIENoZWNrIGZ1bmN0aW9uIGNvbmZsaWN0DQotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaWYoKGdfZGV2aWNlSWQgPT0gUENJX0RFVl9JRF9TRFMwKSB8fA0KLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKGdfZGV2aWNlSWQgPT0gUENJX0RFVl9JRF9GSjIpIHx8DQotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ19kZXZpY2VJZCA9 PSBQQ0lfREVWX0lEX1NCMCkgfHwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnX2RldmljZUlkID09IFBDSV9ERVZfSURfU0Ix KSkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBpID0gMDsNCi0gICAgICAgICAgICBiaHRfd3Jp dGVsKFBjaUlvLCBCSFRfUENJUk1hcHBpbmdFbiwgMHg0MDAwMDAwMCk7DQotICAgICAgICAgICAg d2hpbGUoKGJodF9yZWFkbChQY2lJbywgQkhUX1BDSVJNYXBwaW5nRW4pICYgMHg0MDAwMDAwMCkg PT0gMCkNCi0gICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgIGlmKGkgPT0gNSkNCi0gICAg ICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgLy9EYmdFcnIoKERSSVZFUk5BTUUg IiAtICVzKCkgZnVuY3Rpb24gMCBjYW4ndCBsb2NrIVxuIiwgX19GVU5DVElPTl9fKSk7DQotICAg ICAgICAgICAgICAgICAgICBnb3RvIFdSX0RJU19NQVBQSU5HOw0KLSAgICAgICAgICAgICAgICB9 DQotDQotICAgICAgICAgICAgICAgIGdCUy0+U3RhbGwoMTAwMCk7DQotICAgICAgICAgICAgICAg IGkrKzsNCi0gICAgICAgICAgICAgICAgYmh0X3dyaXRlbChQY2lJbywgQkhUX1BDSVJNYXBwaW5n RW4sIDB4NDAwMDAwMDApOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIGVs c2UgaWYoZ19kZXZpY2VJZCA9PSBQQ0lfREVWX0lEX1NEUzEpDQotICAgICAgICB7DQotICAgICAg ICAgICAgaSA9IDA7DQotICAgICAgICAgICAgYmh0X3dyaXRlbChQY2lJbywgQkhUX1BDSVJNYXBw aW5nRW4sIDB4MjAwMDAwMDApOw0KLQ0KLSAgICAgICAgICAgIHdoaWxlKChiaHRfcmVhZGwoUGNp SW8sIEJIVF9QQ0lSTWFwcGluZ0VuKSAmIDB4MjAwMDAwMDApID09IDApDQotICAgICAgICAgICAg ew0KLSAgICAgICAgICAgICAgICBpZihpID09IDUpDQotICAgICAgICAgICAgICAgIHsNCi0gICAg ICAgICAgICAgICAgICAgIC8vRGJnRXJyKChEUklWRVJOQU1FICIgLSAlcygpIGZ1bmN0aW9uIDAg Y2FuJ3QgbG9jayFcbiIsIF9fRlVOQ1RJT05fXykpOw0KLSAgICAgICAgICAgICAgICAgICAgZ290 byBXUl9ESVNfTUFQUElORzsNCi0gICAgICAgICAgICAgICAgfQ0KLQ0KLSAgICAgICAgICAgICAg ICBnQlMtPlN0YWxsKDEwMDApOw0KLSAgICAgICAgICAgICAgICBpKys7DQotICAgICAgICAgICAg ICAgIGJodF93cml0ZWwoUGNpSW8sIEJIVF9QQ0lSTWFwcGluZ0VuLCAweDIwMDAwMDAwKTsNCi0g ICAgICAgICAgICB9DQotICAgICAgICB9DQotDQotICAgICAgICAvLyBFbmFibGUgTUVNIGFjY2Vz cw0KLSAgICAgICAgYmh0X3dyaXRlbChQY2lJbywgQkhUX1BDSVJNYXBwaW5nVmFsLCAweDgwMDAw MDAwKTsNCi0gICAgICAgIGJodF93cml0ZWwoUGNpSW8sIEJIVF9QQ0lSTWFwcGluZ0N0bCwgMHg4 MDAwMDBEMCk7DQotDQotICAgICAgICAvLyBDaGVjayBsYXN0IG9wZXJhdGlvbiBpcyBjb21wbGV0 ZQ0KLSAgICAgICAgaSA9IDA7DQotICAgICAgICB3aGlsZShiaHRfcmVhZGwoUGNpSW8sIEJIVF9Q Q0lSTWFwcGluZ0N0bCkgJiAweGMwMDAwMDAwKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIGlm KGkgPT0gNSkNCi0gICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgIC8vRGJnRXJyKChEUklW RVJOQU1FICIgLSAlcygpIGNoZWNrIGxhc3Qgb3BlcmF0aW9uIGNvbXBsZXRlIHRpbWVvdXQhISFc biIsIF9fRlVOQ1RJT05fXykpOw0KLSAgICAgICAgICAgICAgICBnb3RvIFdSX0RJU19NQVBQSU5H Ow0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBnQlMtPlN0YWxsKDEwMDApOw0KLSAgICAg ICAgICAgIGkgKz0gMTsNCi0gICAgICAgIH0NCi0NCi0gICAgICAgIC8vIFNldCB3cml0ZSB2YWx1 ZQ0KLSAgICAgICAgYmh0X3dyaXRlbChQY2lJbywgQkhUX1BDSVJNYXBwaW5nVmFsLCB2YWx1ZSk7 DQotICAgICAgICAvLyBTZXQgcmVnaXN0ZXIgYWRkcmVzcw0KLSAgICAgICAgdG1wIHw9IDB4ODAw MDAwMDA7DQotICAgICAgICB0bXAgfD0gb2Zmc2V0Ow0KLSAgICAgICAgYmh0X3dyaXRlbChQY2lJ bywgQkhUX1BDSVJNYXBwaW5nQ3RsLCB0bXApOw0KLQ0KLSAgICAgICAgLy8gQ2hlY2sgd3JpdGUg aXMgY29tcGxldGUNCi0gICAgICAgIGkgPSAwOw0KLSAgICAgICAgd2hpbGUoYmh0X3JlYWRsKFBj aUlvLCBCSFRfUENJUk1hcHBpbmdDdGwpICYgMHg4MDAwMDAwMCkNCi0gICAgICAgIHsNCi0gICAg ICAgICAgICBpZihpID09IDUpDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAvL0Ri Z0VycigoRFJJVkVSTkFNRSAiIC0gJXMoKSBjaGVjayB3cml0ZSBvcGVyYXRpb24gY29tcGxldGUg dGltZW91dCEhIVxuIiwgX19GVU5DVElPTl9fKSk7DQotICAgICAgICAgICAgICAgIGdvdG8gV1Jf RElTX01BUFBJTkc7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGdCUy0+U3RhbGwoMTAw MCk7DQotICAgICAgICAgICAgaSArPSAxOw0KLSAgICAgICAgfQ0KLQ0KLVdSX0RJU19NQVBQSU5H Og0KLSAgICAgICAgLy8gRGlzYWJsZSBNRU0gYWNjZXNzDQotICAgICAgICBiaHRfd3JpdGVsKFBj aUlvLCBCSFRfUENJUk1hcHBpbmdWYWwsIDB4ODAwMDAwMDEpOw0KLSAgICAgICAgYmh0X3dyaXRl bChQY2lJbywgQkhUX1BDSVJNYXBwaW5nQ3RsLCAweDgwMDAwMEQwKTsNCi0NCi0gICAgICAgIC8v IENoZWNrIGxhc3Qgb3BlcmF0aW9uIGlzIGNvbXBsZXRlDQotICAgICAgICBpID0gMDsNCi0gICAg ICAgIHdoaWxlKGJodF9yZWFkbChQY2lJbywgQkhUX1BDSVJNYXBwaW5nQ3RsKSAmIDB4YzAwMDAw MDApDQotICAgICAgICB7DQotICAgICAgICAgICAgaWYoaSA9PSA1KQ0KLSAgICAgICAgICAgIHsN Ci0gICAgICAgICAgICAgICAgLy9EYmdFcnIoKERSSVZFUk5BTUUgIiAtICVzKCkgY2hlY2sgbGFz dCBvcGVyYXRpb24gY29tcGxldGUgdGltZW91dCEhIVxuIiwgX19GVU5DVElPTl9fKSk7DQotICAg ICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBnQlMtPlN0 YWxsKDEwMDApOw0KLSAgICAgICAgICAgIGkgKz0gMTsNCi0gICAgICAgIH0NCi0NCi0gICAgICAg IC8vIERpc2FibGUgZnVuY3Rpb24gY29uZmxpY3QNCi0NCi0gICAgICAgIC8vIERpc2FibGUgbWFw cGluZw0KLSAgICAgICAgYmh0X3dyaXRlbChQY2lJbywgQkhUX1BDSVJNYXBwaW5nRW4sIDB4ODAw MDAwMDApOw0KLSAgICB9DQotfQ0KLQ0KLXZvaWQgUGNpQmh0T3IzMihFRklfUENJX0lPX1BST1RP Q09MICpQY2lJbywgVUlOVDMyIG9mZnNldCwgVUlOVDMyIHZhbHVlKQ0KLXsNCi0gICAgICAgICAg ICAgIFVJTlQzMiBhcmc7DQotICAgICAgICAgICAgICBhcmcgPSBQY2lCaHRSZWFkMzIoUGNpSW8s IG9mZnNldCk7DQotICAgICAgICAgICAgICBQY2lCaHRXcml0ZTMyKFBjaUlvLCBvZmZzZXQsIHZh bHVlIHwgYXJnKTsNCi19DQotDQotdm9pZCBQY2lCaHRBbmQzMihFRklfUENJX0lPX1BST1RPQ09M ICpQY2lJbywgVUlOVDMyIG9mZnNldCwgVUlOVDMyIHZhbHVlKQ0KLXsNCi0gICAgICAgICAgICAg IFVJTlQzMiBhcmc7DQotICAgICAgICAgICAgICBhcmcgPSBQY2lCaHRSZWFkMzIoUGNpSW8sIG9m ZnNldCk7DQotICAgICAgICAgICAgICBQY2lCaHRXcml0ZTMyKFBjaUlvLCBvZmZzZXQsIHZhbHVl ICYgYXJnKTsNCi19DQotDQoNCg0KUGxlYXNlIGNoZWNrIGl0IQ0KQnIsDQpNaWtlDQo=