Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pDH4q-0000H7-Q9 for pgsql-hackers@arkaria.postgresql.org; Thu, 05 Jan 2023 03:38:01 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1pDH4p-0005na-Mh for pgsql-hackers@arkaria.postgresql.org; Thu, 05 Jan 2023 03:37:59 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pDH4o-0005nQ-Vb for pgsql-hackers@lists.postgresql.org; Thu, 05 Jan 2023 03:37:59 +0000 Received: from esa10.fujitsucc.c3s2.iphmx.com ([68.232.159.247]) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pDH4l-0002aN-Db for pgsql-hackers@lists.postgresql.org; Thu, 05 Jan 2023 03:37:58 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=fujitsu.com; i=@fujitsu.com; q=dns/txt; s=fj1; t=1672889875; x=1704425875; h=from:to:cc:subject:date:message-id:references: in-reply-to:mime-version; bh=Io076CxtAVsJ5MuqoE9hC8n9r8IR+Vjq75q3jDK1iIE=; b=JbQH+78MWcWNk7HYD61sVQhCh6gKx+z8G9gvNXC6qtS3RBa+416B8UPl cTpCGzVin14FS+NzVqLUGSh1F5lNBxHBpDHhSOVsTHMDGswQn3RRX5rWZ myFoR9SqOhDnFl5wFmlrMIhqyyAqWE7ey09BP5rvgIxBzMXYHzPS1ETCM pUJK7HVcGXgG2DKhvxtH673IiTkch67xT3AFj7oZ0zMUbT7KUH0D6/bx5 ZJLU7J66jLIuQMuX1eXmfFdEMTUMiOQJepiXLo1eruEvWKgyITLpjlmPd Lp9FAzvcjvMFt4H7zQPogFTyRB7jQ+/vFZIoa8hOLZgt2yqiW4qSVxF2I g==; X-IronPort-AV: E=McAfee;i="6500,9779,10580"; a="73930321" X-IronPort-AV: E=Sophos;i="5.96,301,1665414000"; d="scan'208,223";a="73930321" Received: from mail-os0jpn01lp2109.outbound.protection.outlook.com (HELO JPN01-OS0-obe.outbound.protection.outlook.com) ([104.47.23.109]) by ob1.fujitsucc.c3s2.iphmx.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 05 Jan 2023 12:37:51 +0900 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=P36FCGK/pqEISFwSKyRF49SotnFgU/CB3sQV75gIcxhz0/HiFI2KVjPIzmknTyi7qsAYyv07SFyya8ZK+b9uMHA67upgM4Hl/rXmJXu0+mgj2XtVjFhOUieAT8T0paWYKBWxrci4a37WXQVU0NJK6LWCwVUyhVpw+PgPDqjRIruaIav1edPB5pSVL+6IpIzZ5U/Vn7BYOs850LsXfJD+gYYpBTmO66TGsCpGZRoXx0zJoAFbTk+bFpbq8e7FJkN82oETZ551AZuxurLptHCt/WbA5/aNl4Q+Huz0f70SZLLhVZUbnpNbU/2w+kXKrVfbizAqaTKu+ocS2qMANlDqVg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=g+yF5rmXxcv1ckvqVi32ViB/DxfvLtIr4fDQYcyZxoo=; b=ll+a1uJKzjfSPu+UwOkEEOh2+IY2qDorbyiZcb936VPmBTFLVAD/mV0hI7NMMa9jjhKL0orCeqFrNPUYS7jVjE2l8qyWc1B4H2HNCmbjIcYHZMuJIT2e+CSFEgY1KY3se2mlPegavSvrEi9hmOl9WU/NftWp0wiBN4xNcpUbjKweYjYME2VBCZgryoKSaCHXDlfL6dQIvJ0ORcH3tM9lmVpbviyHqlhS+SlmWv174O1Wa7s9YEz8U6uYrBd+LBqzsdRxhFuS5kL9CjFvDbYMLPPoX7kZ570m563btppMSyyPq5YJyqFsRFfzxKpTXaUyKKxJVB6glPiVjCC9Lc3Cxw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=fujitsu.com; dmarc=pass action=none header.from=fujitsu.com; dkim=pass header.d=fujitsu.com; arc=none Received: from OS0PR01MB5716.jpnprd01.prod.outlook.com (2603:1096:604:bb::12) by TYWPR01MB11249.jpnprd01.prod.outlook.com (2603:1096:400:3f9::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5944.19; Thu, 5 Jan 2023 03:37:46 +0000 Received: from OS0PR01MB5716.jpnprd01.prod.outlook.com ([fe80::db62:a054:b1fa:4cb3]) by OS0PR01MB5716.jpnprd01.prod.outlook.com ([fe80::db62:a054:b1fa:4cb3%3]) with mapi id 15.20.5944.019; Thu, 5 Jan 2023 03:37:46 +0000 From: "houzj.fnst@fujitsu.com" To: Dilip Kumar , Amit Kapila CC: Masahiko Sawada , "wangw.fnst@fujitsu.com" , Peter Smith , "shiy.fnst@fujitsu.com" , PostgreSQL Hackers Subject: RE: Perform streaming logical transactions by background workers and parallel apply Thread-Topic: Perform streaming logical transactions by background workers and parallel apply Thread-Index: AQHZD4gmc8Gf0xrGM0OFaEbpojAcOq5uQq1wgAHYoYCAAB++4IAAIlOAgAGmKgCAABa30IADFsaAgAFWGwCAABBJYIAA+pYAgABJqTCAAgB9AIAA8s2ggABurUCABGXB4IAAfjmAgAEdzwCAAHCvAIABHXEAgAIlRYCAAWA5AIAEvuWAgAE6wQCAAY/VgIAAWFEwgAAJz4CAAB4xgIAABTsAgADsLVA= Date: Thu, 5 Jan 2023 03:37:46 +0000 Message-ID: References: In-Reply-To: Accept-Language: ja-JP, en-US Content-Language: ja-JP X-MS-Has-Attach: yes X-MS-TNEF-Correlator: msip_labels: =?utf-8?B?TVNJUF9MYWJlbF9hNzI5NWNjMS1kMjc5LTQyYWMtYWI0ZC0zYjBmNGZlY2Uw?= =?utf-8?B?NTBfQWN0aW9uSWQ9MGExYmU0NGUtMWFiYS00NjljLTkxY2QtNzRmYmIzODM4?= =?utf-8?B?MWVlO01TSVBfTGFiZWxfYTcyOTVjYzEtZDI3OS00MmFjLWFiNGQtM2IwZjRm?= =?utf-8?B?ZWNlMDUwX0NvbnRlbnRCaXRzPTA7TVNJUF9MYWJlbF9hNzI5NWNjMS1kMjc5?= =?utf-8?B?LTQyYWMtYWI0ZC0zYjBmNGZlY2UwNTBfRW5hYmxlZD10cnVlO01TSVBfTGFi?= =?utf-8?B?ZWxfYTcyOTVjYzEtZDI3OS00MmFjLWFiNGQtM2IwZjRmZWNlMDUwX01ldGhv?= =?utf-8?B?ZD1TdGFuZGFyZDtNU0lQX0xhYmVsX2E3Mjk1Y2MxLWQyNzktNDJhYy1hYjRk?= =?utf-8?B?LTNiMGY0ZmVjZTA1MF9OYW1lPUZVSklUU1UtUkVTVFJJQ1RFRO+/ou++gA==?= =?utf-8?B?776LO01TSVBfTGFiZWxfYTcyOTVjYzEtZDI3OS00MmFjLWFiNGQtM2IwZjRm?= =?utf-8?B?ZWNlMDUwX1NldERhdGU9MjAyMy0wMS0wNVQwMzozNDo0Mlo7TVNJUF9MYWJl?= =?utf-8?B?bF9hNzI5NWNjMS1kMjc5LTQyYWMtYWI0ZC0zYjBmNGZlY2UwNTBfU2l0ZUlk?= =?utf-8?Q?=3Da19f121d-81e1-4858-a9d8-736e267fd4c7;?= authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=fujitsu.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: OS0PR01MB5716:EE_|TYWPR01MB11249:EE_ x-ms-office365-filtering-correlation-id: 9dc20b09-18de-417c-74b0-08daeece35e4 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: 95wW8TVN9MGUgjGDxOpEzVcHcploMG96p4XsYL19d4+cepO9bmfjEz/GMgf9rcCGewYgu0ye8C9/SSI2QMHOCOrr5LqHCWx7trDFjGu/I0KDx3HiZ1xzJEaj1gLo93FAX/cQECeAK52bq2HHQgUerIiW1zJRf5kBQXWgra1NswT42HxxVeUQYcKJhxmVdAVwc14BnwMviB1wRzAokZL0KM2xp9Sr//cgBSEdZIO93IYTSLJd1SWQNDyZXVTT2RbWeyhMlqv+xi9M6oNs0YA2Q92g7VqHU63z5CaPH5d51oVCeKQg6vuHqxxgmWQTp0Q/o3u+QNSuxjH1mNfSkIHL5OkCO4jfkA4Axai9P/+BKIg3ZdIXfiYWl7RoLtoRIRAru1idOYqRtt1VXhCLtd9kv+uV8ZVkyRMZQnejazpz3vIuV++TBWGofiUoEmuInZe9lZtBpFMDrqMpaQq03gkdEPvSCjxzeNrlNIw38xTZoGCISCPGY0bS5D16i4Uu/8BmzNJUiFhjWrcQsDsMbUgFmGtmk7XpurY5Um3V8mkrdSIRhF6HodPXZL3TTQ1AJWnsZbSu1xUnXCy/0+O5p9uYqev3mx3AT+r3OUU58/bxWkPlp1vKBy028ge51huahVGvdCWlzNOV64UPyQfDwReaX+hLoLXtlZaw7RwjUOEKSku4dfK4NosSMpObKuZYQBRJkgxu7G4iZ8ttoa/SrOoeCm0PSeHr4V77ETf0CUnBfrE= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:OS0PR01MB5716.jpnprd01.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(4636009)(396003)(136003)(346002)(39860400002)(376002)(366004)(451199015)(1590799012)(1580799009)(33656002)(85182001)(83380400001)(5660300002)(82960400001)(99936003)(38100700002)(122000001)(8936002)(2906002)(52536014)(41300700001)(38070700005)(86362001)(71200400001)(76116006)(110136005)(54906003)(6506007)(55016003)(7696005)(53546011)(64756008)(8676002)(66556008)(66446008)(4326008)(66476007)(66946007)(316002)(478600001)(9686003)(186003)(26005);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?NGcyUzRsTTd4NG85MFoybUZnU0JaWE5XTzR3ckNYYkJyNXNaRGtQMGJJVWVS?= =?utf-8?B?RWlLYTdnSUFtM3g5SVV6VTFqaUdHU0wzajdBSEFMQXhsdUxyTHBVSCtJZzhp?= =?utf-8?B?WUxvQTFWM0tLd0cxK2xCMEhqbFlzVlY0U0g5bzJBTGtyUTMzMzRLekJQZFhl?= =?utf-8?B?ZmxZY3BCeWNZRDlEV0dlMy9ZeVh6L0dHMUJqZjFQUS94RkgzRWZuQ2IzNE8y?= =?utf-8?B?TnE5SDZmTTNIK1k4UG9qdnFpenBiVUJ3bnV6YzExdTlxcjNqVGQwOFNoV2pa?= =?utf-8?B?UHoxQ01sSjVMSzN2QWNaaFJ1K2xvY3hjMDBhNm1FRlN0djBxVTB5TFBrSWNS?= =?utf-8?B?Y3M1SmRZbkRBMkFhMHVlZFpzcUFRRU1iUlQwWUMyV3J6WTUrTFhmQUdkR29P?= =?utf-8?B?em80MTA4YmFjVlJSRXlhbFltV2ZHNURyeHM1T0lqZXJzOUViVW50RlVWYzhU?= =?utf-8?B?c3lBZzhLcld6YmxUY3lzR2hwMENSSUJqSVVvWkV1T242ZHpjR0lOR045bkI1?= =?utf-8?B?LzhBYzZqL2QvQmIzNHpBTEdMbXo1ajRDUUZlTXhJNXJXMkt3ZUp6c3RiUm9R?= =?utf-8?B?SW5lSEUrUXh3M2I1RXdTbUl6TnFLWlIzYmZyWTVLZFo4dHkvMVdGREd3Z3hH?= =?utf-8?B?WGNyYzFFYVZLcVA2YUtBWm15NGw0T3k5N3dvbHpFNHdyOFRMNisrZEpZcjk3?= =?utf-8?B?c0R1UVVtNzh6RE9jSnExcGFwbEZNdXlQVHI2VmRQYmlZN1dZTmRTbklHNU8z?= =?utf-8?B?VHU0WDNveWYyUEVPS3NncHZhdElEcWFEN3c2c2pzMmhyckRSR3QrczNCY2Zm?= =?utf-8?B?emZ1cmZQMm9yUzc4NlBlaEhlTHRISnpyT3hOdThWU093ZWwxOTU4eVZqQjFR?= =?utf-8?B?WHZvcXAvT25JMldubkRqK205N2FsTDR5ZXVlWjhHc3N6RTlrcEswcnF3bmhZ?= =?utf-8?B?d0N1bDI5UFdyL3RlUkw5VGF0NFlXck1peGZkRjFWWTR3QWc5Z24wcVBsT0ZK?= =?utf-8?B?aXpoNDRiSThmOVNNaEN0ZzduYzFCNEVFZFNNOEVjdXhZU0xYTXNGSTJrT29v?= =?utf-8?B?MWlKcjBzT0tEMmZ2dDdMb1hmTlhhOCtMazhjYjVWcE4rNWZKM1VqSHFKanFM?= =?utf-8?B?N0U4d1hiVXJpenlvR3NJekUzRXZOZS9PbnBmWmd2aVhUVlJ5cU9JOEFjNVNQ?= =?utf-8?B?YkkvVjcvSzJXaGlkMUIwTjhDNENVSHROdWJnem4wTVB1a1lXR0ZmRXhvNkV5?= =?utf-8?B?OVlOV1F3VUt6cE5qbDJWbHpwR2Z5MjE1blEveHdiUHdvajV3WHJWUnBPTEY2?= =?utf-8?B?bGtIREFwU0d1SDFDUngxNTQ2YlNYbUFNV25QUy9Vc2QrNk1JdWtReXlLY3hU?= =?utf-8?B?YXZJNW83Z0FvQmpMcUJQVUxpbmwrWG9wcXhSODN3aVl6Q3c5Rzh6bW5MTWNN?= =?utf-8?B?N3o2VlJKWHpVMGM4TVFWVS9BL29IZUlDLy9RUFhkREtNd1ByQ2x6dElXamtM?= =?utf-8?B?ZEVnWVdZaGh6YnlsQnljcDg0U0o2R2c5ekJtcTl0bG82Z3FOdjBsL0lURkR5?= =?utf-8?B?MzNlZ1EwRDV4cG82WHR6MUJra0dOdEhZWkdEazMwa2FNam9kUHVXNzZ0cnhY?= =?utf-8?B?YWI2RTRndWhScGk2d3RPUENOdko5RVhzdjl3YjMzV2l6bTVsUzBtTStNekFa?= =?utf-8?B?d0dudHZGRDBvWk5LZHpjWW0xNkRQRE90djgwYlFuNUxSNXRKTjkzUUlBQ2dX?= =?utf-8?B?TnRsN1RCTWZFMGJDOUhaTnBGaVF0eldvYkUrSDEvV256Q0FybXlqTUFWaERY?= =?utf-8?B?M1pEUWtDbk02cFU2eDVEQmhUa1VRNEJpY2J5amVyVTM2WkpyRkNHUEd4ZnQz?= =?utf-8?B?WlVENFl3SnU0YmdGNmk2SEl5ZDJKQnMrb1NsMGVYb2ZOY2lQS0pTWVV3eTQ4?= =?utf-8?B?dExsN0VlUUh0YmtaU255UzVlY0JubjZkMHpMOUVJbUd6WHYzOUZTTkNyNUJl?= =?utf-8?B?ZjU1SXpGY3pmNVo1dzE0QUZxQ1o4dG84dS90SFVBcXZzVnlrd1FnSHBJUjlR?= =?utf-8?B?L21QR0xIY0lhMW5XYVU3c0cyNFo2anFxV3BQVHoyU2hzNVYrU0xIVTlZQllw?= =?utf-8?Q?ROfjbKF9tqg8uJqniIooL/ZdJ?= Content-Type: multipart/mixed; boundary="_006_OS0PR01MB5716C2CC59810717EC9601EE94FA9OS0PR01MB5716jpnp_" MIME-Version: 1.0 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: prhqBWyqEBAQwxSwK5dvJ9G8qPKsYZbm+pydbmKbAeneuqgQYs84eA3iDXWft26pcfT8nBc8PfgiT814c0oG6UvEIa/ab6wo3wIDVyvC/VUE7M7lleFOAFZhdrQ7Z3IcaoL0/1BF6YYlpBxYqeLhzhW2CUeysLczYjWeLxFm2qC7aJkXkPEdxNr2pK9Lo9SSD8yMMLjDH6Wvw/WZv3LLzIangY5DOHfkxhz8L6qLEI07H/70veE1pEG6g9jks34uQM3rBo6uaOWZcn2OY5Ns6qu4gSUWWvczwcqRvKjpgJ3BCuKkmtIhgrrs0QwgsPlXFwLJsftchJt98Tx/quf4naE+X7PhArmM5gvbGmyd+L30Z5yoGOOARKkHtBDngDTd22uwzdra4z+PzXLhtLXoMxegVYxetS919CRBWmquFlSmtUlANL86uMTxAnSQ2cpDF01f9xMTClnycbfh4EuSyB38G8BTm/4dLBYkSK3TQi6WBrY3lL3ieBjpKE1SkoqhOhlhlR/D1HISIShdd8XLOargOyn2gFnnUnysGwqvxSQn3CGPh+5XKPKiDxEuzQ0HP4QCRXNTN5qJLuHEnYuzBgWMCiIjR/sNYatznGZu7e7jk5cEHQqwHmc4X8jjWxYNV94FgahXpgQ8mE8UgZS7Blp6/62sKMwZqYAgimxScJ1IM310XpkUP+m/++T8mELHgqDlTgzqTjJTEUDbq6C7MBl+UY+LH5lu23Qt+t4zpkTsE0ulhcwrNuYhMhNJ5S1BY4PbTItjFtKrqYGbVfbIN78DvnlBYg/6VHVdiO0FzwuWTBHRCOOngk1VaMcnviAMXGMSvaY56wsLsUOOr/hUJoSrTLT0VDhOajFSAuikVFeG2lZ79Ei8zUMCRyLHhfczETucD2fZzovCGnNQ4mg/xg== X-OriginatorOrg: fujitsu.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: OS0PR01MB5716.jpnprd01.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9dc20b09-18de-417c-74b0-08daeece35e4 X-MS-Exchange-CrossTenant-originalarrivaltime: 05 Jan 2023 03:37:46.0560 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: a19f121d-81e1-4858-a9d8-736e267fd4c7 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: Oqg8uBvoF3t4VDZhGZyKdf2zacjVEZDimgefPF1GqWalaj80sq+KCm4YgNU52CFj33E9DIwKIZ48xRQ+pmZ3VQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYWPR01MB11249 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --_006_OS0PR01MB5716C2CC59810717EC9601EE94FA9OS0PR01MB5716jpnp_ Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 T24gV2VkbmVzZGF5LCBKYW51YXJ5IDQsIDIwMjMgOToyOSBQTSBEaWxpcCBLdW1hciA8ZGlsaXBi YWxhdXRAZ21haWwuY29tPiB3cm90ZToNCj4gDQo+IE9uIFdlZCwgSmFuIDQsIDIwMjMgYXQgNjo0 MCBQTSBBbWl0IEthcGlsYSA8YW1pdC5rYXBpbGExNkBnbWFpbC5jb20+IHdyb3RlOg0KPiA+DQo+ ID4gT24gV2VkLCBKYW4gNCwgMjAyMyBhdCA0OjUyIFBNIERpbGlwIEt1bWFyIDxkaWxpcGJhbGF1 dEBnbWFpbC5jb20+IHdyb3RlOg0KPiA+ID4NCj4gPiA+IDIuDQo+ID4gPiArICogU2luY2UgdGhl IGRhdGFiYXNlIHN0cnVjdHVyZSAoc2NoZW1hIG9mIHN1YnNjcmlwdGlvbiB0YWJsZXMsDQo+ID4g PiArIGNvbnN0cmFpbnRzLA0KPiA+ID4gKyAqIGV0Yy4pIG9mIHRoZSBwdWJsaXNoZXIgYW5kIHN1 YnNjcmliZXIgY291bGQgYmUgZGlmZmVyZW50LA0KPiA+ID4gKyBhcHBseWluZw0KPiA+ID4gKyAq IHRyYW5zYWN0aW9ucyBpbiBwYXJhbGxlbCBtb2RlIG9uIHRoZSBzdWJzY3JpYmVyIHNpZGUgY2Fu IGNhdXNlDQo+ID4gPiArIHNvbWUNCj4gPiA+ICsgKiBkZWFkbG9ja3MgdGhhdCBkbyBub3Qgb2Nj dXIgb24gdGhlIHB1Ymxpc2hlciBzaWRlLg0KPiA+ID4NCj4gPiA+IEkgdGhpbmsgdGhpcyBwYXJh Z3JhcGggbmVlZHMgdG8gYmUgcmVwaHJhc2VkIGEgYml0LiAgSXQgaXMgc2F5aW5nDQo+ID4gPiB0 aGF0IHNvbWUgZGVhZGxvY2sgY2FuIG9jY3VyIG9uIHN1YnNjcmliZXJzIHdoaWNoIGRpZCBub3Qg b2NjdXIgb24NCj4gPiA+IHRoZSBwdWJsaXNoZXIuICBJIHRoaW5rIHdoYXQgaXQgc2hvdWxkIGJl IGNvbnZleWluZyBpcyB0aGF0IHRoZQ0KPiA+ID4gZGVhZGxvY2sgY2FuIG9jY3VyIGR1ZSB0byBj b25jdXJyZW50bHkgYXBwbHlpbmcgdGhlDQo+ID4gPiBjb25mbGljdGluZy9kZXBlbmRlbnQgdHJh bnNhY3Rpb25zIHdoaWNoIGFyZSBub3QNCj4gPiA+IGNvbmZsaWN0aW5nL2RlcGVuZGVudCBvbiB0 aGUgcHVibGlzaGVyIGR1ZSB0byA8ZXhwbGFpbiByZWFzb24+Lg0KPiA+ID4gQmVjYXVzZSBpZiB3 ZSBjcmVhdGUgdGhlIHNhbWUgc2NoZW1hIG9uIHRoZSBwdWJsaXNoZXIgaXQgbWlnaHQgbm90DQo+ ID4gPiBoYXZlIGVuZGVkIHVwIGluIGEgZGVhZGxvY2sgaW5zdGVhZCBpdCB3b3VsZCBoYXZlIGJl ZW4gZXhlY3V0ZWQgaW4NCj4gPiA+IHNlcXVlbmNlIChkdWUgdG8gbG9jayB3YWl0aW5nKS4gU28g dGhlIG1haW4gcG9pbnQgd2UgYXJlIGNvbnZleWluZw0KPiA+ID4gaXMgdGhhdCB0aGUgdHJhbnNh Y3Rpb24gd2hpY2ggd2FzIGluZGVwZW5kZW50IG9mIGVhY2ggb3RoZXIgb24gdGhlDQo+ID4gPiBw dWJsaXNoZXIgY291bGQgYmUgZGVwZW5kZW50IG9uIHRoZSBzdWJzY3JpYmVyIGFuZCB0aGV5IGNh biBlbmQgdXAgaW4NCj4gZGVhZGxvY2sgZHVlIHRvIHBhcmFsbGVsIGFwcGx5Lg0KPiA+ID4NCj4g Pg0KPiA+IEhvdyBhYm91dCBjaGFuZ2luZyBpdCB0bzogIldlIGhhdmUgYSByaXNrIG9mIGRlYWRs b2NrIGR1ZSB0bw0KPiA+IHBhcmFsbGVsbHkgYXBwbHlpbmcgdGhlIHRyYW5zYWN0aW9ucyB0aGF0 IHdlcmUgaW5kZXBlbmRlbnQgb24gdGhlDQo+ID4gcHVibGlzaGVyIHNpZGUgYnV0IGJlY2FtZSBk ZXBlbmRlbnQgb24gdGhlIHN1YnNjcmliZXIgc2lkZSBkdWUgdG8gdGhlDQo+ID4gZGlmZmVyZW50 IGRhdGFiYXNlIHN0cnVjdHVyZXMgKGxpa2Ugc2NoZW1hIG9mIHN1YnNjcmlwdGlvbiB0YWJsZXMs DQo+ID4gY29uc3RyYWludHMsIGV0Yy4pIG9uIGVhY2ggc2lkZS4NCj4gDQo+IEkgdGhpbmsgdGhp cyBsb29rcyBnb29kIHRvIG1lLg0KDQpUaGFua3MgZm9yIHRoZSBjb21tZW50cy4NCkF0dGFjaCB0 aGUgbmV3IHZlcnNpb24gcGF0Y2ggc2V0IHdoaWNoIGNoYW5nZWQgdGhlIGNvbW1lbnRzIGFzIHN1 Z2dlc3RlZC4NCg0KQmVzdCByZWdhcmRzLA0KSG91IHpqDQo= --_006_OS0PR01MB5716C2CC59810717EC9601EE94FA9OS0PR01MB5716jpnp_ Content-Type: application/octet-stream; name="v74-0005-Add-a-main_worker_pid-to-pg_stat_subscription.patch" Content-Description: v74-0005-Add-a-main_worker_pid-to-pg_stat_subscription.patch Content-Disposition: attachment; filename="v74-0005-Add-a-main_worker_pid-to-pg_stat_subscription.patch"; size=9720; creation-date="Thu, 05 Jan 2023 03:36:34 GMT"; modification-date="Thu, 05 Jan 2023 03:37:41 GMT" Content-Transfer-Encoding: base64 RnJvbSA5MjE1ODRjNjRjNjUyMTVmMTYyODg4MmNlMjNlM2ZhN2Q5MTUxZjAxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAiaG91emouZm5zdCIgPGhvdXpqLmZuc3RAY24uZnVqaXRzdS5j b20+CkRhdGU6IFRodSwgNiBPY3QgMjAyMiAxNDo0MjoyNCArMDgwMApTdWJqZWN0OiBbUEFUQ0gg djc0IDUvNV0gQWRkIGEgbWFpbl93b3JrZXJfcGlkIHRvIHBnX3N0YXRfc3Vic2NyaXB0aW9uCgpt YWluX3dvcmtlcl9waWQgaXMgUHJvY2VzcyBJRCBvZiB0aGUgbGVhZGVyIGFwcGx5IHdvcmtlciwg aWYgdGhpcyBwcm9jZXNzIGlzIGEKYXBwbHkgcGFyYWxsZWwgd29ya2VyLiBOVUxMIGlmIHRoaXMg cHJvY2VzcyBpcyBhIGxlYWRlciBhcHBseSB3b3JrZXIgb3IgYQpzeW5jaHJvbml6YXRpb24gd29y a2VyLgoKVGhlIG5ldyBjb2x1bW4gY2FuIG1ha2UgaXQgZWFzaWVyIHRvIGRpc3Rpbmd1aXNoIGxl YWRlciBhcHBseSB3b3JrZXIgYW5kIGFwcGx5CnBhcmFsbGVsIHdvcmtlciB3aGljaCBpcyBhbHNv IHNpbWlsYXIgdG8gdGhlICdsZWFkZXJfcGlkJyBjb2x1bW4gaW4KcGdfc3RhdF9hY3Rpdml0eS4K LS0tCiBkb2Mvc3JjL3NnbWwvbG9naWNhbC1yZXBsaWNhdGlvbi5zZ21sICAgICAgfCAgMyArLQog ZG9jL3NyYy9zZ21sL21vbml0b3Jpbmcuc2dtbCAgICAgICAgICAgICAgIHwgMjYgKysrKysrKysr KysrKystLS0tCiBzcmMvYmFja2VuZC9jYXRhbG9nL3N5c3RlbV92aWV3cy5zcWwgICAgICAgfCAg MSArCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xhdW5jaGVyLmMgfCAzMiArKysr KysrKysrKystLS0tLS0tLS0tCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0ICAgICAg ICAgICAgfCAgNiArKy0tCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3J1bGVzLm91dCAgICAg ICAgfCAgMyArLQogNiBmaWxlcyBjaGFuZ2VkLCA0NSBpbnNlcnRpb25zKCspLCAyNiBkZWxldGlv bnMoLSkKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvbG9naWNhbC1yZXBsaWNhdGlvbi5zZ21s IGIvZG9jL3NyYy9zZ21sL2xvZ2ljYWwtcmVwbGljYXRpb24uc2dtbAppbmRleCBjYjRmNWM2ZjE5 Li42MjU0Mzg4YjA0IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvbG9naWNhbC1yZXBsaWNhdGlv bi5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9sb2dpY2FsLXJlcGxpY2F0aW9uLnNnbWwKQEAgLTE2 OTEsNyArMTY5MSw4IEBAIENPTlRFWFQ6ICBwcm9jZXNzaW5nIHJlbW90ZSBkYXRhIGZvciByZXBs aWNhdGlvbiBvcmlnaW4gInBnXzE2Mzk1IiBkdXJpbmcgIklOU0VSCiAgICBzdWJzY3JpcHRpb24u ICBBIGRpc2FibGVkIHN1YnNjcmlwdGlvbiBvciBhIGNyYXNoZWQgc3Vic2NyaXB0aW9uIHdpbGwg aGF2ZQogICAgemVybyByb3dzIGluIHRoaXMgdmlldy4gIElmIHRoZSBpbml0aWFsIGRhdGEgc3lu Y2hyb25pemF0aW9uIG9mIGFueQogICAgdGFibGUgaXMgaW4gcHJvZ3Jlc3MsIHRoZXJlIHdpbGwg YmUgYWRkaXRpb25hbCB3b3JrZXJzIGZvciB0aGUgdGFibGVzCi0gICBiZWluZyBzeW5jaHJvbml6 ZWQuCisgICBiZWluZyBzeW5jaHJvbml6ZWQuIE1vcmVvdmVyLCBpZiB0aGUgc3RyZWFtaW5nIHRy YW5zYWN0aW9uIGlzIGFwcGxpZWQgaW4KKyAgIHBhcmFsbGVsLCB0aGVyZSB3aWxsIGJlIGFkZGl0 aW9uYWwgd29ya2Vycy4KICAgPC9wYXJhPgogIDwvc2VjdDE+CiAKZGlmZiAtLWdpdCBhL2RvYy9z cmMvc2dtbC9tb25pdG9yaW5nLnNnbWwgYi9kb2Mvc3JjL3NnbWwvbW9uaXRvcmluZy5zZ21sCmlu ZGV4IGNmMjIwYzNiY2IuLmMyZTdiZGI3N2QgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9tb25p dG9yaW5nLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL21vbml0b3Jpbmcuc2dtbApAQCAtMzE5Niwx MyArMzE5NiwyNCBAQCBTRUxFQ1QgcGlkLCB3YWl0X2V2ZW50X3R5cGUsIHdhaXRfZXZlbnQgRlJP TSBwZ19zdGF0X2FjdGl2aXR5IFdIRVJFIHdhaXRfZXZlbnQgaQogICAgICAgPC9wYXJhPjwvZW50 cnk+CiAgICAgIDwvcm93PgogCisgICAgIDxyb3c+CisgICAgICA8ZW50cnkgcm9sZT0iY2F0YWxv Z190YWJsZV9lbnRyeSI+PHBhcmEgcm9sZT0iY29sdW1uX2RlZmluaXRpb24iPgorICAgICAgIDxz dHJ1Y3RmaWVsZD5hcHBseV9sZWFkZXJfcGlkPC9zdHJ1Y3RmaWVsZD4gPHR5cGU+aW50ZWdlcjwv dHlwZT4KKyAgICAgIDwvcGFyYT4KKyAgICAgIDxwYXJhPgorICAgICAgIFByb2Nlc3MgSUQgb2Yg dGhlIGxlYWRlciBhcHBseSB3b3JrZXIsIGlmIHRoaXMgcHJvY2VzcyBpcyBhIGFwcGx5CisgICAg ICAgcGFyYWxsZWwgd29ya2VyLiBOVUxMIGlmIHRoaXMgcHJvY2VzcyBpcyBhIGxlYWRlciBhcHBs eSB3b3JrZXIgb3IgYQorICAgICAgIHN5bmNocm9uaXphdGlvbiB3b3JrZXIuCisgICAgICA8L3Bh cmE+PC9lbnRyeT4KKyAgICAgPC9yb3c+CisKICAgICAgPHJvdz4KICAgICAgIDxlbnRyeSByb2xl PSJjYXRhbG9nX3RhYmxlX2VudHJ5Ij48cGFyYSByb2xlPSJjb2x1bW5fZGVmaW5pdGlvbiI+CiAg ICAgICAgPHN0cnVjdGZpZWxkPnJlbGlkPC9zdHJ1Y3RmaWVsZD4gPHR5cGU+b2lkPC90eXBlPgog ICAgICAgPC9wYXJhPgogICAgICAgPHBhcmE+CiAgICAgICAgT0lEIG9mIHRoZSByZWxhdGlvbiB0 aGF0IHRoZSB3b3JrZXIgaXMgc3luY2hyb25pemluZzsgbnVsbCBmb3IgdGhlCi0gICAgICAgbWFp biBhcHBseSB3b3JrZXIKKyAgICAgICBtYWluIGFwcGx5IHdvcmtlciBhbmQgdGhlIHBhcmFsbGVs IGFwcGx5IHdvcmtlcgogICAgICAgPC9wYXJhPjwvZW50cnk+CiAgICAgIDwvcm93PgogCkBAIC0z MjEyLDcgKzMyMjMsNyBAQCBTRUxFQ1QgcGlkLCB3YWl0X2V2ZW50X3R5cGUsIHdhaXRfZXZlbnQg RlJPTSBwZ19zdGF0X2FjdGl2aXR5IFdIRVJFIHdhaXRfZXZlbnQgaQogICAgICAgPC9wYXJhPgog ICAgICAgPHBhcmE+CiAgICAgICAgTGFzdCB3cml0ZS1haGVhZCBsb2cgbG9jYXRpb24gcmVjZWl2 ZWQsIHRoZSBpbml0aWFsIHZhbHVlIG9mCi0gICAgICAgdGhpcyBmaWVsZCBiZWluZyAwCisgICAg ICAgdGhpcyBmaWVsZCBiZWluZyAwOyBudWxsIGZvciB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2Vy CiAgICAgICA8L3BhcmE+PC9lbnRyeT4KICAgICAgPC9yb3c+CiAKQEAgLTMyMjEsNyArMzIzMiw4 IEBAIFNFTEVDVCBwaWQsIHdhaXRfZXZlbnRfdHlwZSwgd2FpdF9ldmVudCBGUk9NIHBnX3N0YXRf YWN0aXZpdHkgV0hFUkUgd2FpdF9ldmVudCBpCiAgICAgICAgPHN0cnVjdGZpZWxkPmxhc3RfbXNn X3NlbmRfdGltZTwvc3RydWN0ZmllbGQ+IDx0eXBlPnRpbWVzdGFtcCB3aXRoIHRpbWUgem9uZTwv dHlwZT4KICAgICAgIDwvcGFyYT4KICAgICAgIDxwYXJhPgotICAgICAgIFNlbmQgdGltZSBvZiBs YXN0IG1lc3NhZ2UgcmVjZWl2ZWQgZnJvbSBvcmlnaW4gV0FMIHNlbmRlcgorICAgICAgIFNlbmQg dGltZSBvZiBsYXN0IG1lc3NhZ2UgcmVjZWl2ZWQgZnJvbSBvcmlnaW4gV0FMIHNlbmRlcjsgbnVs bCBmb3IgdGhlCisgICAgICAgcGFyYWxsZWwgYXBwbHkgd29ya2VyCiAgICAgICA8L3BhcmE+PC9l bnRyeT4KICAgICAgPC9yb3c+CiAKQEAgLTMyMzAsNyArMzI0Miw4IEBAIFNFTEVDVCBwaWQsIHdh aXRfZXZlbnRfdHlwZSwgd2FpdF9ldmVudCBGUk9NIHBnX3N0YXRfYWN0aXZpdHkgV0hFUkUgd2Fp dF9ldmVudCBpCiAgICAgICAgPHN0cnVjdGZpZWxkPmxhc3RfbXNnX3JlY2VpcHRfdGltZTwvc3Ry dWN0ZmllbGQ+IDx0eXBlPnRpbWVzdGFtcCB3aXRoIHRpbWUgem9uZTwvdHlwZT4KICAgICAgIDwv cGFyYT4KICAgICAgIDxwYXJhPgotICAgICAgIFJlY2VpcHQgdGltZSBvZiBsYXN0IG1lc3NhZ2Ug cmVjZWl2ZWQgZnJvbSBvcmlnaW4gV0FMIHNlbmRlcgorICAgICAgIFJlY2VpcHQgdGltZSBvZiBs YXN0IG1lc3NhZ2UgcmVjZWl2ZWQgZnJvbSBvcmlnaW4gV0FMIHNlbmRlcjsgbnVsbCBmb3IKKyAg ICAgICB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyCiAgICAgICA8L3BhcmE+PC9lbnRyeT4KICAg ICAgPC9yb3c+CiAKQEAgLTMyMzksNyArMzI1Miw4IEBAIFNFTEVDVCBwaWQsIHdhaXRfZXZlbnRf dHlwZSwgd2FpdF9ldmVudCBGUk9NIHBnX3N0YXRfYWN0aXZpdHkgV0hFUkUgd2FpdF9ldmVudCBp CiAgICAgICAgPHN0cnVjdGZpZWxkPmxhdGVzdF9lbmRfbHNuPC9zdHJ1Y3RmaWVsZD4gPHR5cGU+ cGdfbHNuPC90eXBlPgogICAgICAgPC9wYXJhPgogICAgICAgPHBhcmE+Ci0gICAgICAgTGFzdCB3 cml0ZS1haGVhZCBsb2cgbG9jYXRpb24gcmVwb3J0ZWQgdG8gb3JpZ2luIFdBTCBzZW5kZXIKKyAg ICAgICBMYXN0IHdyaXRlLWFoZWFkIGxvZyBsb2NhdGlvbiByZXBvcnRlZCB0byBvcmlnaW4gV0FM IHNlbmRlcjsgbnVsbCBmb3IKKyAgICAgICB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyCiAgICAg ICA8L3BhcmE+PC9lbnRyeT4KICAgICAgPC9yb3c+CiAKQEAgLTMyNDksNyArMzI2Myw3IEBAIFNF TEVDVCBwaWQsIHdhaXRfZXZlbnRfdHlwZSwgd2FpdF9ldmVudCBGUk9NIHBnX3N0YXRfYWN0aXZp dHkgV0hFUkUgd2FpdF9ldmVudCBpCiAgICAgICA8L3BhcmE+CiAgICAgICA8cGFyYT4KICAgICAg ICBUaW1lIG9mIGxhc3Qgd3JpdGUtYWhlYWQgbG9nIGxvY2F0aW9uIHJlcG9ydGVkIHRvIG9yaWdp biBXQUwKLSAgICAgICBzZW5kZXIKKyAgICAgICBzZW5kZXI7IG51bGwgZm9yIHRoZSBwYXJhbGxl bCBhcHBseSB3b3JrZXIKICAgICAgIDwvcGFyYT48L2VudHJ5PgogICAgICA8L3Jvdz4KICAgICA8 L3Rib2R5PgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fdmlld3Muc3Fs IGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fdmlld3Muc3FsCmluZGV4IGFmMDc2ODRiMjAu LmFlZjkyNmFmN2YgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVtX3ZpZXdz LnNxbAorKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3N5c3RlbV92aWV3cy5zcWwKQEAgLTk0OSw2 ICs5NDksNyBAQCBDUkVBVEUgVklFVyBwZ19zdGF0X3N1YnNjcmlwdGlvbiBBUwogICAgICAgICAg ICAgc3Uub2lkIEFTIHN1YmlkLAogICAgICAgICAgICAgc3Uuc3VibmFtZSwKICAgICAgICAgICAg IHN0LnBpZCwKKyAgICAgICAgICAgIHN0LmFwcGx5X2xlYWRlcl9waWQsCiAgICAgICAgICAgICBz dC5yZWxpZCwKICAgICAgICAgICAgIHN0LnJlY2VpdmVkX2xzbiwKICAgICAgICAgICAgIHN0Lmxh c3RfbXNnX3NlbmRfdGltZSwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xv Z2ljYWwvbGF1bmNoZXIuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbGF1bmNo ZXIuYwppbmRleCBhZmI3YWNkZGFhLi5iMzllMGYxY2ZjIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xhdW5jaGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vbG9naWNhbC9sYXVuY2hlci5jCkBAIC0xMDcyLDcgKzEwNzIsNyBAQCBJc0xvZ2ljYWxM YXVuY2hlcih2b2lkKQogRGF0dW0KIHBnX3N0YXRfZ2V0X3N1YnNjcmlwdGlvbihQR19GVU5DVElP Tl9BUkdTKQogewotI2RlZmluZSBQR19TVEFUX0dFVF9TVUJTQ1JJUFRJT05fQ09MUwk4CisjZGVm aW5lIFBHX1NUQVRfR0VUX1NVQlNDUklQVElPTl9DT0xTCTkKIAlPaWQJCQlzdWJpZCA9IFBHX0FS R0lTTlVMTCgwKSA/IEludmFsaWRPaWQgOiBQR19HRVRBUkdfT0lEKDApOwogCWludAkJCWk7CiAJ UmV0dXJuU2V0SW5mbyAqcnNpbmZvID0gKFJldHVyblNldEluZm8gKikgZmNpbmZvLT5yZXN1bHRp bmZvOwpAQCAtMTA5OCwxMCArMTA5OCw2IEBAIHBnX3N0YXRfZ2V0X3N1YnNjcmlwdGlvbihQR19G VU5DVElPTl9BUkdTKQogCQlpZiAoT2lkSXNWYWxpZChzdWJpZCkgJiYgd29ya2VyLnN1YmlkICE9 IHN1YmlkKQogCQkJY29udGludWU7CiAKLQkJLyogU2tpcCBpZiB0aGlzIGlzIGEgcGFyYWxsZWwg YXBwbHkgd29ya2VyICovCi0JCWlmIChpc1BhcmFsbGVsQXBwbHlXb3JrZXIoJndvcmtlcikpCi0J CQljb250aW51ZTsKLQogCQl3b3JrZXJfcGlkID0gd29ya2VyLnByb2MtPnBpZDsKIAogCQl2YWx1 ZXNbMF0gPSBPYmplY3RJZEdldERhdHVtKHdvcmtlci5zdWJpZCk7CkBAIC0xMTEwLDI2ICsxMTA2 LDMyIEBAIHBnX3N0YXRfZ2V0X3N1YnNjcmlwdGlvbihQR19GVU5DVElPTl9BUkdTKQogCQllbHNl CiAJCQludWxsc1sxXSA9IHRydWU7CiAJCXZhbHVlc1syXSA9IEludDMyR2V0RGF0dW0od29ya2Vy X3BpZCk7Ci0JCWlmIChYTG9nUmVjUHRySXNJbnZhbGlkKHdvcmtlci5sYXN0X2xzbikpCisKKwkJ aWYgKHdvcmtlci5hcHBseV9sZWFkZXJfcGlkID09IEludmFsaWRQaWQpCiAJCQludWxsc1szXSA9 IHRydWU7CiAJCWVsc2UKLQkJCXZhbHVlc1szXSA9IExTTkdldERhdHVtKHdvcmtlci5sYXN0X2xz bik7Ci0JCWlmICh3b3JrZXIubGFzdF9zZW5kX3RpbWUgPT0gMCkKKwkJCXZhbHVlc1szXSA9IElu dDMyR2V0RGF0dW0od29ya2VyLmFwcGx5X2xlYWRlcl9waWQpOworCisJCWlmIChYTG9nUmVjUHRy SXNJbnZhbGlkKHdvcmtlci5sYXN0X2xzbikpCiAJCQludWxsc1s0XSA9IHRydWU7CiAJCWVsc2UK LQkJCXZhbHVlc1s0XSA9IFRpbWVzdGFtcFR6R2V0RGF0dW0od29ya2VyLmxhc3Rfc2VuZF90aW1l KTsKLQkJaWYgKHdvcmtlci5sYXN0X3JlY3ZfdGltZSA9PSAwKQorCQkJdmFsdWVzWzRdID0gTFNO R2V0RGF0dW0od29ya2VyLmxhc3RfbHNuKTsKKwkJaWYgKHdvcmtlci5sYXN0X3NlbmRfdGltZSA9 PSAwKQogCQkJbnVsbHNbNV0gPSB0cnVlOwogCQllbHNlCi0JCQl2YWx1ZXNbNV0gPSBUaW1lc3Rh bXBUekdldERhdHVtKHdvcmtlci5sYXN0X3JlY3ZfdGltZSk7Ci0JCWlmIChYTG9nUmVjUHRySXNJ bnZhbGlkKHdvcmtlci5yZXBseV9sc24pKQorCQkJdmFsdWVzWzVdID0gVGltZXN0YW1wVHpHZXRE YXR1bSh3b3JrZXIubGFzdF9zZW5kX3RpbWUpOworCQlpZiAod29ya2VyLmxhc3RfcmVjdl90aW1l ID09IDApCiAJCQludWxsc1s2XSA9IHRydWU7CiAJCWVsc2UKLQkJCXZhbHVlc1s2XSA9IExTTkdl dERhdHVtKHdvcmtlci5yZXBseV9sc24pOwotCQlpZiAod29ya2VyLnJlcGx5X3RpbWUgPT0gMCkK KwkJCXZhbHVlc1s2XSA9IFRpbWVzdGFtcFR6R2V0RGF0dW0od29ya2VyLmxhc3RfcmVjdl90aW1l KTsKKwkJaWYgKFhMb2dSZWNQdHJJc0ludmFsaWQod29ya2VyLnJlcGx5X2xzbikpCiAJCQludWxs c1s3XSA9IHRydWU7CiAJCWVsc2UKLQkJCXZhbHVlc1s3XSA9IFRpbWVzdGFtcFR6R2V0RGF0dW0o d29ya2VyLnJlcGx5X3RpbWUpOworCQkJdmFsdWVzWzddID0gTFNOR2V0RGF0dW0od29ya2VyLnJl cGx5X2xzbik7CisJCWlmICh3b3JrZXIucmVwbHlfdGltZSA9PSAwKQorCQkJbnVsbHNbOF0gPSB0 cnVlOworCQllbHNlCisJCQl2YWx1ZXNbOF0gPSBUaW1lc3RhbXBUekdldERhdHVtKHdvcmtlci5y ZXBseV90aW1lKTsKIAogCQl0dXBsZXN0b3JlX3B1dHZhbHVlcyhyc2luZm8tPnNldFJlc3VsdCwg cnNpbmZvLT5zZXREZXNjLAogCQkJCQkJCSB2YWx1ZXMsIG51bGxzKTsKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3By b2MuZGF0CmluZGV4IDdiZTlhNTAxNDcuLjYzNGM2ZDQ3NTQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9j LmRhdApAQCAtNTQyNiw5ICs1NDI2LDkgQEAKICAgcHJvbmFtZSA9PiAncGdfc3RhdF9nZXRfc3Vi c2NyaXB0aW9uJywgcHJvcm93cyA9PiAnMTAnLCBwcm9pc3N0cmljdCA9PiAnZicsCiAgIHByb3Jl dHNldCA9PiAndCcsIHByb3ZvbGF0aWxlID0+ICdzJywgcHJvcGFyYWxsZWwgPT4gJ3InLAogICBw cm9yZXR0eXBlID0+ICdyZWNvcmQnLCBwcm9hcmd0eXBlcyA9PiAnb2lkJywKLSAgcHJvYWxsYXJn dHlwZXMgPT4gJ3tvaWQsb2lkLG9pZCxpbnQ0LHBnX2xzbix0aW1lc3RhbXB0eix0aW1lc3RhbXB0 eixwZ19sc24sdGltZXN0YW1wdHp9JywKLSAgcHJvYXJnbW9kZXMgPT4gJ3tpLG8sbyxvLG8sbyxv LG8sb30nLAotICBwcm9hcmduYW1lcyA9PiAne3N1YmlkLHN1YmlkLHJlbGlkLHBpZCxyZWNlaXZl ZF9sc24sbGFzdF9tc2dfc2VuZF90aW1lLGxhc3RfbXNnX3JlY2VpcHRfdGltZSxsYXRlc3RfZW5k X2xzbixsYXRlc3RfZW5kX3RpbWV9JywKKyAgcHJvYWxsYXJndHlwZXMgPT4gJ3tvaWQsb2lkLG9p ZCxpbnQ0LGludDQscGdfbHNuLHRpbWVzdGFtcHR6LHRpbWVzdGFtcHR6LHBnX2xzbix0aW1lc3Rh bXB0en0nLAorICBwcm9hcmdtb2RlcyA9PiAne2ksbyxvLG8sbyxvLG8sbyxvLG99JywKKyAgcHJv YXJnbmFtZXMgPT4gJ3tzdWJpZCxzdWJpZCxyZWxpZCxwaWQsYXBwbHlfbGVhZGVyX3BpZCxyZWNl aXZlZF9sc24sbGFzdF9tc2dfc2VuZF90aW1lLGxhc3RfbXNnX3JlY2VpcHRfdGltZSxsYXRlc3Rf ZW5kX2xzbixsYXRlc3RfZW5kX3RpbWV9JywKICAgcHJvc3JjID0+ICdwZ19zdGF0X2dldF9zdWJz Y3JpcHRpb24nIH0sCiB7IG9pZCA9PiAnMjAyNicsIGRlc2NyID0+ICdzdGF0aXN0aWNzOiBjdXJy ZW50IGJhY2tlbmQgUElEJywKICAgcHJvbmFtZSA9PiAncGdfYmFja2VuZF9waWQnLCBwcm92b2xh dGlsZSA9PiAncycsIHByb3BhcmFsbGVsID0+ICdyJywKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvcnVsZXMub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ydWxl cy5vdXQKaW5kZXggZmI5ZjkzNmQ0My4uN2U2ZWE2MGY5ZiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9ydWxlcy5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9ydWxlcy5vdXQKQEAgLTIwOTQsNiArMjA5NCw3IEBAIHBnX3N0YXRfc3NsfCBTRUxFQ1Qgcy5w aWQsCiBwZ19zdGF0X3N1YnNjcmlwdGlvbnwgU0VMRUNUIHN1Lm9pZCBBUyBzdWJpZCwKICAgICBz dS5zdWJuYW1lLAogICAgIHN0LnBpZCwKKyAgICBzdC5hcHBseV9sZWFkZXJfcGlkLAogICAgIHN0 LnJlbGlkLAogICAgIHN0LnJlY2VpdmVkX2xzbiwKICAgICBzdC5sYXN0X21zZ19zZW5kX3RpbWUs CkBAIC0yMTAxLDcgKzIxMDIsNyBAQCBwZ19zdGF0X3N1YnNjcmlwdGlvbnwgU0VMRUNUIHN1Lm9p ZCBBUyBzdWJpZCwKICAgICBzdC5sYXRlc3RfZW5kX2xzbiwKICAgICBzdC5sYXRlc3RfZW5kX3Rp bWUKICAgIEZST00gKHBnX3N1YnNjcmlwdGlvbiBzdQotICAgICBMRUZUIEpPSU4gcGdfc3RhdF9n ZXRfc3Vic2NyaXB0aW9uKE5VTEw6Om9pZCkgc3Qoc3ViaWQsIHJlbGlkLCBwaWQsIHJlY2VpdmVk X2xzbiwgbGFzdF9tc2dfc2VuZF90aW1lLCBsYXN0X21zZ19yZWNlaXB0X3RpbWUsIGxhdGVzdF9l bmRfbHNuLCBsYXRlc3RfZW5kX3RpbWUpIE9OICgoc3Quc3ViaWQgPSBzdS5vaWQpKSk7CisgICAg IExFRlQgSk9JTiBwZ19zdGF0X2dldF9zdWJzY3JpcHRpb24oTlVMTDo6b2lkKSBzdChzdWJpZCwg cmVsaWQsIHBpZCwgYXBwbHlfbGVhZGVyX3BpZCwgcmVjZWl2ZWRfbHNuLCBsYXN0X21zZ19zZW5k X3RpbWUsIGxhc3RfbXNnX3JlY2VpcHRfdGltZSwgbGF0ZXN0X2VuZF9sc24sIGxhdGVzdF9lbmRf dGltZSkgT04gKChzdC5zdWJpZCA9IHN1Lm9pZCkpKTsKIHBnX3N0YXRfc3Vic2NyaXB0aW9uX3N0 YXRzfCBTRUxFQ1Qgc3Muc3ViaWQsCiAgICAgcy5zdWJuYW1lLAogICAgIHNzLmFwcGx5X2Vycm9y X2NvdW50LAotLSAKMi4yMy4wLndpbmRvd3MuMQoK --_006_OS0PR01MB5716C2CC59810717EC9601EE94FA9OS0PR01MB5716jpnp_ Content-Type: application/octet-stream; name="v74-0001-Perform-apply-of-large-transactions-by-parallel-.patch" Content-Description: v74-0001-Perform-apply-of-large-transactions-by-parallel-.patch Content-Disposition: attachment; filename="v74-0001-Perform-apply-of-large-transactions-by-parallel-.patch"; size=270995; creation-date="Thu, 05 Jan 2023 03:36:34 GMT"; modification-date="Thu, 05 Jan 2023 03:37:42 GMT" Content-Transfer-Encoding: base64 RnJvbSA5MzJiMmIzMmQwYzZkNjUzOThlODZjZmE4OTUwNDE2OWExY2Q0MjRjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAiaG91emouZm5zdCIgPGhvdXpqLmZuc3RAY24uZnVqaXRzdS5j b20+CkRhdGU6IFdlZCwgMjAgQXByIDIwMjIgMTY6NDU6MDcgKzA4MDAKU3ViamVjdDogW1BBVENI IHY3NCAxLzVdIFBlcmZvcm0gYXBwbHkgb2YgbGFyZ2UgdHJhbnNhY3Rpb25zIGJ5IHBhcmFsbGVs CiB3b3JrZXJzLgoKQ3VycmVudGx5LCBmb3IgbGFyZ2UgdHJhbnNhY3Rpb25zLCB0aGUgcHVibGlz aGVyIHNlbmRzIHRoZSBkYXRhIGluCm11bHRpcGxlIHN0cmVhbXMgKGNoYW5nZXMgZGl2aWRlZCBp bnRvIGNodW5rcyBkZXBlbmRpbmcgdXBvbgpsb2dpY2FsX2RlY29kaW5nX3dvcmtfbWVtKSwgYW5k IHRoZW4gb24gdGhlIHN1YnNjcmliZXItc2lkZSwgdGhlIGFwcGx5CndvcmtlciB3cml0ZXMgdGhl IGNoYW5nZXMgaW50byB0ZW1wb3JhcnkgZmlsZXMgYW5kIG9uY2UgaXQgcmVjZWl2ZXMgdGhlCmNv bW1pdCwgaXQgcmVhZHMgZnJvbSB0aG9zZSBmaWxlcyBhbmQgYXBwbGllcyB0aGUgZW50aXJlIHRy YW5zYWN0aW9uLiBUbwppbXByb3ZlIHRoZSBwZXJmb3JtYW5jZSBvZiBzdWNoIHRyYW5zYWN0aW9u cywgd2UgY2FuIGluc3RlYWQgYWxsb3cgdGhlbSB0bwpiZSBhcHBsaWVkIHZpYSBwYXJhbGxlbCB3 b3JrZXJzLgoKSW4gdGhpcyBhcHByb2FjaCwgd2UgYXNzaWduIGEgbmV3IHBhcmFsbGVsIGFwcGx5 IHdvcmtlciAoaWYgYXZhaWxhYmxlKSBhcwpzb29uIGFzIHRoZSB4YWN0J3MgZmlyc3Qgc3RyZWFt IGlzIHJlY2VpdmVkIGFuZCB0aGUgbGVhZGVyIGFwcGx5IHdvcmtlcgp3aWxsIHNlbmQgY2hhbmdl cyB0byB0aGlzIG5ldyB3b3JrZXIgdmlhIHNoYXJlZCBtZW1vcnkuIFRoZSBwYXJhbGxlbCBhcHBs eQp3b3JrZXIgd2lsbCBkaXJlY3RseSBhcHBseSB0aGUgY2hhbmdlIGluc3RlYWQgb2Ygd3JpdGlu ZyBpdCB0byB0ZW1wb3JhcnkKZmlsZXMuIEhvd2V2ZXIsIGlmIHRoZSBsZWFkZXIgYXBwbHkgd29y a2VyIHRpbWVzIG91dCB3aGlsZSBhdHRlbXB0aW5nIHRvCnNlbmQgYSBtZXNzYWdlIHRvIHRoZSBw YXJhbGxlbCBhcHBseSB3b3JrZXIsIGl0IHdpbGwgc3dpdGNoIHRvCiJwYXJ0aWFsIHNlcmlhbGl6 ZSIgbW9kZSAtICBpbiB0aGlzIG1vZGUsIHRoZSBsZWFkZXIgc2VyaWFsaXplcyBhbGwKcmVtYWlu aW5nIGNoYW5nZXMgdG8gYSBmaWxlIGFuZCBub3RpZmllcyB0aGUgcGFyYWxsZWwgYXBwbHkgd29y a2VycyB0bwpyZWFkIGFuZCBhcHBseSB0aGVtIGF0IHRoZSBlbmQgb2YgdGhlIHRyYW5zYWN0aW9u LiBXZSB1c2UgYSBub24tYmxvY2tpbmcKd2F5IHRvIHNlbmQgdGhlIG1lc3NhZ2VzIGZyb20gdGhl IGxlYWRlciBhcHBseSB3b3JrZXIgdG8gdGhlIHBhcmFsbGVsCmFwcGx5IHRvIGF2b2lkIGRlYWRs b2Nrcy4gV2Uga2VlcCB0aGlzIHBhcmFsbGVsIGFwcGx5IGFzc2lnbmVkIHRpbGwgdGhlCnRyYW5z YWN0aW9uIGNvbW1pdCBpcyByZWNlaXZlZCBhbmQgYWxzbyB3YWl0IGZvciB0aGUgd29ya2VyIHRv IGZpbmlzaCBhdApjb21taXQuIFRoaXMgcHJlc2VydmVzIGNvbW1pdCBvcmRlcmluZyBhbmQgYXZv aWQgd3JpdGluZyB0byBhbmQgcmVhZGluZwpmcm9tIGZpbGVzIGluIG1vc3QgY2FzZXMuIFdlIHN0 aWxsIG5lZWQgdG8gc3BpbGwgaWYgdGhlcmUgaXMgbm8gd29ya2VyCmF2YWlsYWJsZS4KClRoaXMg cGF0Y2ggYWxzbyBleHRlbmRzIHRoZSBTVUJTQ1JJUFRJT04gJ3N0cmVhbWluZycgcGFyYW1ldGVy IHNvIHRoYXQgdGhlCnVzZXIgY2FuIGNvbnRyb2wgd2hldGhlciB0byBhcHBseSB0aGUgc3RyZWFt aW5nIHRyYW5zYWN0aW9uIGluIGEgcGFyYWxsZWwKYXBwbHkgd29ya2VyIG9yIHNwaWxsIHRoZSBj aGFuZ2UgdG8gZGlzay4gVGhlIHVzZXIgY2FuIHNldCB0aGUgc3RyZWFtaW5nCnBhcmFtZXRlciB0 byAnb24vb2ZmJywgb3IgJ3BhcmFsbGVsJy4gVGhlIHBhcmFtZXRlciB2YWx1ZSAncGFyYWxsZWwn IG1lYW5zCnRoZSBzdHJlYW1pbmcgd2lsbCBiZSBhcHBsaWVkIHZpYSBhIHBhcmFsbGVsIGFwcGx5 IHdvcmtlciwgaWYgYXZhaWxhYmxlLgpUaGUgcGFyYW1ldGVyIHZhbHVlICdvbicgbWVhbnMgdGhl IHN0cmVhbWluZyB0cmFuc2FjdGlvbiB3aWxsIGJlIHNwaWxsZWQKdG8gZGlzay4gVGhlIGRlZmF1 bHQgdmFsdWUgaXMgJ29mZicgKHNhbWUgYXMgY3VycmVudCBiZWhhdmlvdXIpLgoKSW4gYWRkaXRp b24sIHRoZSBwYXRjaCBleHRlbmRzIHRoZSBsb2dpY2FsIHJlcGxpY2F0aW9uIFNUUkVBTV9BQk9S VAptZXNzYWdlIHNvIHRoYXQgYWJvcnRfbHNuIGFuZCBhYm9ydF90aW1lIGNhbiBhbHNvIGJlIHNl bnQgd2hpY2ggY2FuIGJlCnVzZWQgdG8gdXBkYXRlIHRoZSByZXBsaWNhdGlvbiBvcmlnaW4gaW4g cGFyYWxsZWwgYXBwbHkgd29ya2VyIHdoZW4gdGhlCnN0cmVhbWluZyB0cmFuc2FjdGlvbiBpcyBh Ym9ydGVkLiBCZWNhdXNlIHRoaXMgbWVzc2FnZSBleHRlbnNpb24gaXMgbmVlZGVkCnRvIHN1cHBv cnQgcGFyYWxsZWwgc3RyZWFtaW5nLCBwYXJhbGxlbCBzdHJlYW1pbmcgaXMgbm90IHN1cHBvcnRl ZCBmb3IKcHVibGljYXRpb25zIG9uIHNlcnZlcnMgPCBQRzE2LgoKTm90ZTogU2luY2UgdGhlIGZp ZWxkICdzdWJzdHJlYW0nIG9mIGNhdGFsb2cgJ3BnX3N1YnNjcmlwdGlvbicgaGFzIGJlZW4KZXhw YW5kZWQsIHdlIG5lZWQgYnVtcCBjYXRhbG9nIHZlcnNpb24uCgpBdXRob3I6IEhvdSBaaGlqaWUs IFdhbmcgd2VpLCBBbWl0IEthcGlsYSB3aXRoIGRlc2lnbiBpbnB1dHMgZnJvbSBTYXdhZGEgTWFz YWhpa28KUmV2aWV3ZWQtYnk6IFNhd2FkYSBNYXNhaGlrbywgUGV0ZXIgU21pdGgsIFNoaSB5dSwg RGlsaXAgS3VtYXIsIEt1cm9kYSBIYXlhdG8KRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMv bS9DQUE0ZUsxK3d5TjZ6cGFIVWtDTG9yRVdOeDc1TUcweGhNd2NGaHZqcW0yS1VSWkVBR3dAbWFp bC5nbWFpbC5jb20KLS0tCiBkb2Mvc3JjL3NnbWwvY2F0YWxvZ3Muc2dtbCAgICAgICAgICAgICAg ICAgICAgfCAgIDExICstCiBkb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwgICAgICAgICAgICAgICAg ICAgICAgfCAgIDI4ICstCiBkb2Mvc3JjL3NnbWwvbG9naWNhbC1yZXBsaWNhdGlvbi5zZ21sICAg ICAgICAgfCAgIDIyICstCiBkb2Mvc3JjL3NnbWwvbW9uaXRvcmluZy5zZ21sICAgICAgICAgICAg ICAgICAgfCAgICA1ICsKIGRvYy9zcmMvc2dtbC9wcm90b2NvbC5zZ21sICAgICAgICAgICAgICAg ICAgICB8ICAgMjkgKy0KIGRvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3N1YnNjcmlwdGlvbi5zZ21s ICAgICB8ICAgMjQgKy0KIGRvYy9zcmMvc2dtbC9zeXN0ZW0tdmlld3Muc2dtbCAgICAgICAgICAg ICAgICB8ICAgIDUgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hhY3QuYyAgICAgICAg ICAgICB8ICAgMjQgKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3N1YnNjcmlwdGlvbmNtZHMuYyAg ICAgICB8ICAgNjcgKy0KIHNyYy9iYWNrZW5kL2xpYnBxL3BxbXEuYyAgICAgICAgICAgICAgICAg ICAgICB8ICAgMTggKy0KIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYmd3b3JrZXIuYyAgICAgICAg ICAgICB8ICAgIDMgKwogc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9pbnRlcnJ1cHQuYyAgICAgICAg ICAgIHwgICAgNSArLQogLi4uL2xpYnBxd2FscmVjZWl2ZXIvbGlicHF3YWxyZWNlaXZlci5jICAg ICAgIHwgICAgNiArLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9NYWtlZmlsZSAg ICAgIHwgICAgMSArCiAuLi4vcmVwbGljYXRpb24vbG9naWNhbC9hcHBseXBhcmFsbGVsd29ya2Vy LmMgfCAxNjIyICsrKysrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL2RlY29kZS5jICAgICAgfCAgICA1ICstCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL2xhdW5jaGVyLmMgICAgfCAgMjIwICsrLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9n aWNhbC9tZXNvbi5idWlsZCAgIHwgICAgMSArCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL29yaWdpbi5jICAgICAgfCAgIDI2ICstCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL3Byb3RvLmMgICAgICAgfCAgIDM3ICstCiAuLi4vcmVwbGljYXRpb24vbG9naWNhbC9yZW9y ZGVyYnVmZmVyLmMgICAgICAgfCAgICA1ICstCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL3RhYmxlc3luYy5jICAgfCAgIDI1ICstCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL3dvcmtlci5jICAgICAgfCAxMzgwICsrKysrKysrKysrLS0tCiBzcmMvYmFja2VuZC9yZXBs aWNhdGlvbi9wZ291dHB1dC9wZ291dHB1dC5jICAgfCAgIDIyICstCiBzcmMvYmFja2VuZC9zdG9y YWdlL2lwYy9wcm9jc2lnbmFsLmMgICAgICAgICAgfCAgICA0ICsKIHNyYy9iYWNrZW5kL3N0b3Jh Z2UvbG1nci9sbWdyLmMgICAgICAgICAgICAgICB8ICAgNDYgKwogc3JjL2JhY2tlbmQvdGNvcC9w b3N0Z3Jlcy5jICAgICAgICAgICAgICAgICAgIHwgICAgMyArCiBzcmMvYmFja2VuZC91dGlscy9h Y3Rpdml0eS93YWl0X2V2ZW50LmMgICAgICAgfCAgICA2ICsKIHNyYy9iYWNrZW5kL3V0aWxzL2Fk dC9sb2NrZnVuY3MuYyAgICAgICAgICAgICB8ICAgMTYgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL21p c2MvZ3VjX3RhYmxlcy5jICAgICAgICAgICB8ICAgMTIgKwogc3JjL2JhY2tlbmQvdXRpbHMvbWlz Yy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlIHwgICAgMSArCiBzcmMvYmluL3BnX2R1bXAvcGdfZHVt cC5jICAgICAgICAgICAgICAgICAgICAgfCAgICA2ICstCiBzcmMvYmluL3BzcWwvZGVzY3JpYmUu YyAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIxICstCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3Bn X3N1YnNjcmlwdGlvbi5oICAgICAgICAgfCAgIDIxICstCiBzcmMvaW5jbHVkZS9jb21tYW5kcy9z dWJzY3JpcHRpb25jbWRzLmggICAgICAgfCAgICAyICsKIHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9u L2xvZ2ljYWxsYXVuY2hlci5oICAgICB8ICAgIDEgKwogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24v bG9naWNhbHByb3RvLmggICAgICAgIHwgICAyOCArLQogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24v bG9naWNhbHdvcmtlci5oICAgICAgIHwgICAgOCArCiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9v cmlnaW4uaCAgICAgICAgICAgICAgfCAgICAyICstCiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9w Z291dHB1dC5oICAgICAgICAgICAgfCAgICAyICstCiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9y ZW9yZGVyYnVmZmVyLmggICAgICAgfCAgICA0ICstCiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93 YWxyZWNlaXZlci5oICAgICAgICAgfCAgICAyICstCiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93 b3JrZXJfaW50ZXJuYWwuaCAgICAgfCAgMjI3ICsrLQogc3JjL2luY2x1ZGUvc3RvcmFnZS9sbWdy LmggICAgICAgICAgICAgICAgICAgIHwgICAgNSArCiBzcmMvaW5jbHVkZS9zdG9yYWdlL2xvY2su aCAgICAgICAgICAgICAgICAgICAgfCAgIDE3ICstCiBzcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2Nz aWduYWwuaCAgICAgICAgICAgICAgfCAgICAxICsKIHNyYy9pbmNsdWRlL3V0aWxzL3dhaXRfZXZl bnQuaCAgICAgICAgICAgICAgICB8ICAgIDIgKwogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9z dWJzY3JpcHRpb24ub3V0ICAgIHwgICA0NiArLQogc3JjL3Rlc3QvcmVncmVzcy9zcWwvc3Vic2Ny aXB0aW9uLnNxbCAgICAgICAgIHwgICAgNiArLQogc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDE1 X3N0cmVhbS5wbCAgICAgICAgIHwgIDI3NCArKy0KIHNyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAx Nl9zdHJlYW1fc3VieGFjdC5wbCB8ICAxMzAgKy0KIHNyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAx N19zdHJlYW1fZGRsLnBsICAgICB8ICAgIDMgKwogLi4uL3QvMDE4X3N0cmVhbV9zdWJ4YWN0X2Fi b3J0LnBsICAgICAgICAgICAgIHwgIDIyMCArKy0KIC4uLi90LzAxOV9zdHJlYW1fc3VieGFjdF9k ZGxfYWJvcnQucGwgICAgICAgICB8ICAgIDMgKwogLi4uL3N1YnNjcmlwdGlvbi90LzAyMl90d29w aGFzZV9jYXNjYWRlLnBsICAgIHwgICAgMiArCiAuLi4vc3Vic2NyaXB0aW9uL3QvMDIzX3R3b3Bo YXNlX3N0cmVhbS5wbCAgICAgfCAgNTI1ICsrKy0tLQogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVk ZWZzLmxpc3QgICAgICAgICAgICAgIHwgICAgNyArCiA1NyBmaWxlcyBjaGFuZ2VkLCA0NDg2IGlu c2VydGlvbnMoKyksIDc1OCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFj a2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2FwcGx5cGFyYWxsZWx3b3JrZXIuYwoKZGlmZiAtLWdp dCBhL2RvYy9zcmMvc2dtbC9jYXRhbG9ncy5zZ21sIGIvZG9jL3NyYy9zZ21sL2NhdGFsb2dzLnNn bWwKaW5kZXggOTMxNmI4MTFhYy4uYzFlNDA0ODA1NCAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21s L2NhdGFsb2dzLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2NhdGFsb2dzLnNnbWwKQEAgLTc5MTMs MTEgKzc5MTMsMTYgQEAgU0NSQU0tU0hBLTI1NiQ8cmVwbGFjZWFibGU+Jmx0O2l0ZXJhdGlvbiBj b3VudCZndDs8L3JlcGxhY2VhYmxlPjo8cmVwbGFjZWFibGU+JmwKIAogICAgICA8cm93PgogICAg ICAgPGVudHJ5IHJvbGU9ImNhdGFsb2dfdGFibGVfZW50cnkiPjxwYXJhIHJvbGU9ImNvbHVtbl9k ZWZpbml0aW9uIj4KLSAgICAgICA8c3RydWN0ZmllbGQ+c3Vic3RyZWFtPC9zdHJ1Y3RmaWVsZD4g PHR5cGU+Ym9vbDwvdHlwZT4KKyAgICAgICA8c3RydWN0ZmllbGQ+c3Vic3RyZWFtPC9zdHJ1Y3Rm aWVsZD4gPHR5cGU+Y2hhcjwvdHlwZT4KICAgICAgIDwvcGFyYT4KICAgICAgIDxwYXJhPgotICAg ICAgIElmIHRydWUsIHRoZSBzdWJzY3JpcHRpb24gd2lsbCBhbGxvdyBzdHJlYW1pbmcgb2YgaW4t cHJvZ3Jlc3MKLSAgICAgICB0cmFuc2FjdGlvbnMKKyAgICAgICBDb250cm9scyBob3cgdG8gaGFu ZGxlIHRoZSBzdHJlYW1pbmcgb2YgaW4tcHJvZ3Jlc3MgdHJhbnNhY3Rpb25zOgorICAgICAgIDxs aXRlcmFsPmY8L2xpdGVyYWw+ID0gZGlzYWxsb3cgc3RyZWFtaW5nIG9mIGluLXByb2dyZXNzIHRy YW5zYWN0aW9ucywKKyAgICAgICA8bGl0ZXJhbD50PC9saXRlcmFsPiA9IHNwaWxsIHRoZSBjaGFu Z2VzIG9mIGluLXByb2dyZXNzIHRyYW5zYWN0aW9ucyB0bworICAgICAgIGRpc2sgYW5kIGFwcGx5 IGF0IG9uY2UgYWZ0ZXIgdGhlIHRyYW5zYWN0aW9uIGlzIGNvbW1pdHRlZCBvbiB0aGUKKyAgICAg ICBwdWJsaXNoZXIgYW5kIHJlY2VpdmVkIGJ5IHRoZSBzdWJzY3JpYmVyLAorICAgICAgIDxsaXRl cmFsPnA8L2xpdGVyYWw+ID0gYXBwbHkgY2hhbmdlcyBkaXJlY3RseSB1c2luZyBhIHBhcmFsbGVs IGFwcGx5CisgICAgICAgd29ya2VyIGlmIGF2YWlsYWJsZSAoc2FtZSBhcyAndCcgaWYgbm8gd29y a2VyIGlzIGF2YWlsYWJsZSkKICAgICAgIDwvcGFyYT48L2VudHJ5PgogICAgICA8L3Jvdz4KIApk aWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sIGIvZG9jL3NyYy9zZ21sL2NvbmZp Zy5zZ21sCmluZGV4IDA1YjM4NjJkMDkuLmEzM2E5MzU3MGIgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMv c2dtbC9jb25maWcuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwKQEAgLTQ5Njgs NyArNDk2OCw4IEBAIEFOWSA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bnVtX3N5bmM8 L3JlcGxhY2VhYmxlPiAoIDxyZXBsYWNlYWJsZSBjbGFzcz0iCiAgICAgICA8bGlzdGl0ZW0+CiAg ICAgICAgPHBhcmE+CiAgICAgICAgIFNwZWNpZmllcyBtYXhpbXVtIG51bWJlciBvZiBsb2dpY2Fs IHJlcGxpY2F0aW9uIHdvcmtlcnMuIFRoaXMgaW5jbHVkZXMKLSAgICAgICAgYm90aCBhcHBseSB3 b3JrZXJzIGFuZCB0YWJsZSBzeW5jaHJvbml6YXRpb24gd29ya2Vycy4KKyAgICAgICAgbGVhZGVy IGFwcGx5IHdvcmtlcnMsIHBhcmFsbGVsIGFwcGx5IHdvcmtlcnMsIGFuZCB0YWJsZSBzeW5jaHJv bml6YXRpb24KKyAgICAgICAgd29ya2Vycy4KICAgICAgICA8L3BhcmE+CiAgICAgICAgPHBhcmE+ CiAgICAgICAgIExvZ2ljYWwgcmVwbGljYXRpb24gd29ya2VycyBhcmUgdGFrZW4gZnJvbSB0aGUg cG9vbCBkZWZpbmVkIGJ5CkBAIC01MDA4LDYgKzUwMDksMzEgQEAgQU5ZIDxyZXBsYWNlYWJsZSBj bGFzcz0icGFyYW1ldGVyIj5udW1fc3luYzwvcmVwbGFjZWFibGU+ICggPHJlcGxhY2VhYmxlIGNs YXNzPSIKICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgIDwvdmFybGlzdGVudHJ5PgogCisgICAgIDx2 YXJsaXN0ZW50cnkgaWQ9Imd1Yy1tYXgtcGFyYWxsZWwtYXBwbHktd29ya2Vycy1wZXItc3Vic2Ny aXB0aW9uIiB4cmVmbGFiZWw9Im1heF9wYXJhbGxlbF9hcHBseV93b3JrZXJzX3Blcl9zdWJzY3Jp cHRpb24iPgorICAgICAgPHRlcm0+PHZhcm5hbWU+bWF4X3BhcmFsbGVsX2FwcGx5X3dvcmtlcnNf cGVyX3N1YnNjcmlwdGlvbjwvdmFybmFtZT4gKDx0eXBlPmludGVnZXI8L3R5cGU+KQorICAgICAg PGluZGV4dGVybT4KKyAgICAgICA8cHJpbWFyeT48dmFybmFtZT5tYXhfcGFyYWxsZWxfYXBwbHlf d29ya2Vyc19wZXJfc3Vic2NyaXB0aW9uPC92YXJuYW1lPiBjb25maWd1cmF0aW9uIHBhcmFtZXRl cjwvcHJpbWFyeT4KKyAgICAgIDwvaW5kZXh0ZXJtPgorICAgICAgPC90ZXJtPgorICAgICAgPGxp c3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICBNYXhpbXVtIG51bWJlciBvZiBwYXJhbGxl bCBhcHBseSB3b3JrZXJzIHBlciBzdWJzY3JpcHRpb24uIFRoaXMKKyAgICAgICAgcGFyYW1ldGVy IGNvbnRyb2xzIHRoZSBhbW91bnQgb2YgcGFyYWxsZWxpc20gZm9yIHN0cmVhbWluZyBvZgorICAg ICAgICBpbi1wcm9ncmVzcyB0cmFuc2FjdGlvbnMgd2l0aCBzdWJzY3JpcHRpb24gcGFyYW1ldGVy CisgICAgICAgIDxsaXRlcmFsPnN0cmVhbWluZyA9IHBhcmFsbGVsPC9saXRlcmFsPi4KKyAgICAg ICA8L3BhcmE+CisgICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBwYXJhbGxlbCBhcHBseSB3b3Jr ZXJzIGFyZSB0YWtlbiBmcm9tIHRoZSBwb29sIGRlZmluZWQgYnkKKyAgICAgICAgPHZhcm5hbWU+ bWF4X2xvZ2ljYWxfcmVwbGljYXRpb25fd29ya2VyczwvdmFybmFtZT4uCisgICAgICAgPC9wYXJh PgorICAgICAgIDxwYXJhPgorICAgICAgICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAyLiBUaGlzIHBh cmFtZXRlciBjYW4gb25seSBiZSBzZXQgaW4gdGhlCisgICAgICAgIDxmaWxlbmFtZT5wb3N0Z3Jl c3FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIG9yIG9uIHRoZSBzZXJ2ZXIgY29tbWFuZAorICAgICAg ICBsaW5lLgorICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFybGlz dGVudHJ5PgorCiAgICAgIDwvdmFyaWFibGVsaXN0PgogICAgIDwvc2VjdDI+CiAKZGlmZiAtLWdp dCBhL2RvYy9zcmMvc2dtbC9sb2dpY2FsLXJlcGxpY2F0aW9uLnNnbWwgYi9kb2Mvc3JjL3NnbWwv bG9naWNhbC1yZXBsaWNhdGlvbi5zZ21sCmluZGV4IDdiOWJiMDBlNWEuLjU0ZjQ4YmU4N2YgMTAw NjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9sb2dpY2FsLXJlcGxpY2F0aW9uLnNnbWwKKysrIGIvZG9j L3NyYy9zZ21sL2xvZ2ljYWwtcmVwbGljYXRpb24uc2dtbApAQCAtMTUwMSw2ICsxNTAxLDE2IEBA IENPTlRFWFQ6ICBwcm9jZXNzaW5nIHJlbW90ZSBkYXRhIGZvciByZXBsaWNhdGlvbiBvcmlnaW4g InBnXzE2Mzk1IiBkdXJpbmcgIklOU0VSCiAgICBtaWdodCBub3QgdmlvbGF0ZSBhbnkgY29uc3Ry YWludC4gIFRoaXMgY2FuIGVhc2lseSBtYWtlIHRoZSBzdWJzY3JpYmVyCiAgICBpbmNvbnNpc3Rl bnQuCiAgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFdoZW4gdGhlIHN0cmVhbWluZyBtb2RlIGlz IDxsaXRlcmFsPnBhcmFsbGVsPC9saXRlcmFsPiwgdGhlIGZpbmlzaCBMU04gb2YKKyAgIGZhaWxl ZCB0cmFuc2FjdGlvbnMgbWF5IG5vdCBiZSBsb2dnZWQuIEluIHRoYXQgY2FzZSwgaXQgbWF5IGJl IG5lY2Vzc2FyeSB0bworICAgY2hhbmdlIHRoZSBzdHJlYW1pbmcgbW9kZSB0byA8bGl0ZXJhbD5v bjwvbGl0ZXJhbD4gb3IgPGxpdGVyYWw+b2ZmPC9saXRlcmFsPiBhbmQKKyAgIGNhdXNlIHRoZSBz YW1lIGNvbmZsaWN0cyBhZ2FpbiBzbyB0aGUgZmluaXNoIExTTiBvZiB0aGUgZmFpbGVkIHRyYW5z YWN0aW9uIHdpbGwKKyAgIGJlIHdyaXR0ZW4gdG8gdGhlIHNlcnZlciBsb2cuIEZvciB0aGUgdXNh Z2Ugb2YgZmluaXNoIExTTiwgcGxlYXNlIHJlZmVyIHRvIDxsaW5rCisgICBsaW5rZW5kPSJzcWwt YWx0ZXJzdWJzY3JpcHRpb24iPjxjb21tYW5kPkFMVEVSIFNVQlNDUklQVElPTiAuLi4KKyAgIFNL SVA8L2NvbW1hbmQ+PC9saW5rPi4KKyAgPC9wYXJhPgogIDwvc2VjdDE+CiAKICA8c2VjdDEgaWQ9 ImxvZ2ljYWwtcmVwbGljYXRpb24tcmVzdHJpY3Rpb25zIj4KQEAgLTE4MDksOCArMTgxOSw5IEBA IENPTlRFWFQ6ICBwcm9jZXNzaW5nIHJlbW90ZSBkYXRhIGZvciByZXBsaWNhdGlvbiBvcmlnaW4g InBnXzE2Mzk1IiBkdXJpbmcgIklOU0VSCiAKICAgIDxwYXJhPgogICAgIDxsaW5rIGxpbmtlbmQ9 Imd1Yy1tYXgtbG9naWNhbC1yZXBsaWNhdGlvbi13b3JrZXJzIj48dmFybmFtZT5tYXhfbG9naWNh bF9yZXBsaWNhdGlvbl93b3JrZXJzPC92YXJuYW1lPjwvbGluaz4KLSAgICBtdXN0IGJlIHNldCB0 byBhdCBsZWFzdCB0aGUgbnVtYmVyIG9mIHN1YnNjcmlwdGlvbnMgKGZvciBhcHBseSB3b3JrZXJz KSwgcGx1cwotICAgIHNvbWUgcmVzZXJ2ZSBmb3IgdGhlIHRhYmxlIHN5bmNocm9uaXphdGlvbiB3 b3JrZXJzLgorICAgIG11c3QgYmUgc2V0IHRvIGF0IGxlYXN0IHRoZSBudW1iZXIgb2Ygc3Vic2Ny aXB0aW9ucyAoZm9yIGxlYWRlciBhcHBseQorICAgIHdvcmtlcnMpLCBwbHVzIHNvbWUgcmVzZXJ2 ZSBmb3IgdGhlIHRhYmxlIHN5bmNocm9uaXphdGlvbiB3b3JrZXJzIGFuZAorICAgIHBhcmFsbGVs IGFwcGx5IHdvcmtlcnMuCiAgICA8L3BhcmE+CiAKICAgIDxwYXJhPgpAQCAtMTgyNyw2ICsxODM4 LDEzIEBAIENPTlRFWFQ6ICBwcm9jZXNzaW5nIHJlbW90ZSBkYXRhIGZvciByZXBsaWNhdGlvbiBv cmlnaW4gInBnXzE2Mzk1IiBkdXJpbmcgIklOU0VSCiAgICAgIHN1YnNjcmlwdGlvbiBpbml0aWFs aXphdGlvbiBvciB3aGVuIG5ldyB0YWJsZXMgYXJlIGFkZGVkLgogICAgPC9wYXJhPgogCisgICA8 cGFyYT4KKyAgICA8bGluayBsaW5rZW5kPSJndWMtbWF4LXBhcmFsbGVsLWFwcGx5LXdvcmtlcnMt cGVyLXN1YnNjcmlwdGlvbiI+PHZhcm5hbWU+bWF4X3BhcmFsbGVsX2FwcGx5X3dvcmtlcnNfcGVy X3N1YnNjcmlwdGlvbjwvdmFybmFtZT48L2xpbms+CisgICAgIGNvbnRyb2xzIHRoZSBhbW91bnQg b2YgcGFyYWxsZWxpc20gZm9yIHN0cmVhbWluZyBvZiBpbi1wcm9ncmVzcworICAgICB0cmFuc2Fj dGlvbnMgd2l0aCBzdWJzY3JpcHRpb24gcGFyYW1ldGVyCisgICAgIDxsaXRlcmFsPnN0cmVhbWlu ZyA9IHBhcmFsbGVsPC9saXRlcmFsPi4KKyAgIDwvcGFyYT4KKwogICAgPHBhcmE+CiAgICAgTG9n aWNhbCByZXBsaWNhdGlvbiB3b3JrZXJzIGFyZSBhbHNvIGFmZmVjdGVkIGJ5CiAgICAgPGxpbmsg bGlua2VuZD0iZ3VjLXdhbC1yZWNlaXZlci10aW1lb3V0Ij48dmFybmFtZT53YWxfcmVjZWl2ZXJf dGltZW91dDwvdmFybmFtZT48L2xpbms+LApkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL21vbml0 b3Jpbmcuc2dtbCBiL2RvYy9zcmMvc2dtbC9tb25pdG9yaW5nLnNnbWwKaW5kZXggNWJjYmEwZmRl Yy4uY2YyMjBjM2JjYiAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL21vbml0b3Jpbmcuc2dtbAor KysgYi9kb2Mvc3JjL3NnbWwvbW9uaXRvcmluZy5zZ21sCkBAIC0xODU4LDYgKzE4NTgsMTEgQEAg cG9zdGdyZXMgICAyNzA5MyAgMC4wICAwLjAgIDMwMDk2ICAyNzUyID8gICAgICAgIFNzICAgMTE6 MzQgICAwOjAwIHBvc3RncmVzOiBzZXIKICAgICAgIDxlbnRyeT48bGl0ZXJhbD5hZHZpc29yeTwv bGl0ZXJhbD48L2VudHJ5PgogICAgICAgPGVudHJ5PldhaXRpbmcgdG8gYWNxdWlyZSBhbiBhZHZp c29yeSB1c2VyIGxvY2suPC9lbnRyeT4KICAgICAgPC9yb3c+CisgICAgIDxyb3c+CisgICAgICA8 ZW50cnk+PGxpdGVyYWw+YXBwbHl0cmFuc2FjdGlvbjwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAg PGVudHJ5PldhaXRpbmcgdG8gYWNxdWlyZSBhIGxvY2sgb24gYSByZW1vdGUgdHJhbnNhY3Rpb24g YmVpbmcgYXBwbGllZAorICAgICAgYnkgYSBsb2dpY2FsIHJlcGxpY2F0aW9uIHN1YnNjcmliZXIu PC9lbnRyeT4KKyAgICAgPC9yb3c+CiAgICAgIDxyb3c+CiAgICAgICA8ZW50cnk+PGxpdGVyYWw+ ZXh0ZW5kPC9saXRlcmFsPjwvZW50cnk+CiAgICAgICA8ZW50cnk+V2FpdGluZyB0byBleHRlbmQg YSByZWxhdGlvbi48L2VudHJ5PgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3Byb3RvY29sLnNn bWwgYi9kb2Mvc3JjL3NnbWwvcHJvdG9jb2wuc2dtbAppbmRleCAwMzMxMmUwN2UyLi40MzllZjY3 NWYzIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcHJvdG9jb2wuc2dtbAorKysgYi9kb2Mvc3Jj L3NnbWwvcHJvdG9jb2wuc2dtbApAQCAtMzEwMyw3ICszMTAzLDcgQEAgcHNxbCAiZGJuYW1lPXBv c3RncmVzIHJlcGxpY2F0aW9uPWRhdGFiYXNlIiAtYyAiSURFTlRJRllfU1lTVEVNOyIKICAgICAg PGxpc3RpdGVtPgogICAgICAgPHBhcmE+CiAgICAgICAgUHJvdG9jb2wgdmVyc2lvbi4gQ3VycmVu dGx5IHZlcnNpb25zIDxsaXRlcmFsPjE8L2xpdGVyYWw+LCA8bGl0ZXJhbD4yPC9saXRlcmFsPiwK LSAgICAgICBhbmQgPGxpdGVyYWw+MzwvbGl0ZXJhbD4gYXJlIHN1cHBvcnRlZC4KKyAgICAgICA8 bGl0ZXJhbD4zPC9saXRlcmFsPiwgYW5kIDxsaXRlcmFsPjQ8L2xpdGVyYWw+IGFyZSBzdXBwb3J0 ZWQuCiAgICAgICA8L3BhcmE+CiAgICAgICA8cGFyYT4KICAgICAgICBWZXJzaW9uIDxsaXRlcmFs PjI8L2xpdGVyYWw+IGlzIHN1cHBvcnRlZCBvbmx5IGZvciBzZXJ2ZXIgdmVyc2lvbiAxNApAQCAt MzExMyw2ICszMTEzLDExIEBAIHBzcWwgImRibmFtZT1wb3N0Z3JlcyByZXBsaWNhdGlvbj1kYXRh YmFzZSIgLWMgIklERU5USUZZX1NZU1RFTTsiCiAgICAgICAgVmVyc2lvbiA8bGl0ZXJhbD4zPC9s aXRlcmFsPiBpcyBzdXBwb3J0ZWQgb25seSBmb3Igc2VydmVyIHZlcnNpb24gMTUKICAgICAgICBh bmQgYWJvdmUsIGFuZCBpdCBhbGxvd3Mgc3RyZWFtaW5nIG9mIHR3by1waGFzZSBjb21taXRzLgog ICAgICAgPC9wYXJhPgorICAgICAgPHBhcmE+CisgICAgICAgVmVyc2lvbiA8bGl0ZXJhbD40PC9s aXRlcmFsPiBpcyBzdXBwb3J0ZWQgb25seSBmb3Igc2VydmVyIHZlcnNpb24gMTYKKyAgICAgICBh bmQgYWJvdmUsIGFuZCBpdCBhbGxvd3Mgc3RyZWFtcyBvZiBsYXJnZSBpbi1wcm9ncmVzcyB0cmFu c2FjdGlvbnMgdG8KKyAgICAgICBiZSBhcHBsaWVkIGluIHBhcmFsbGVsLgorICAgICAgPC9wYXJh PgogICAgICA8L2xpc3RpdGVtPgogICAgIDwvdmFybGlzdGVudHJ5PgogCkBAIC02ODgzLDYgKzY4 ODgsMjggQEAgcHNxbCAiZGJuYW1lPXBvc3RncmVzIHJlcGxpY2F0aW9uPWRhdGFiYXNlIiAtYyAi SURFTlRJRllfU1lTVEVNOyIKICAgICAgICAgPC9wYXJhPgogICAgICAgIDwvbGlzdGl0ZW0+CiAg ICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICA8dGVy bT5JbnQ2NCAoWExvZ1JlY1B0cik8L3Rlcm0+CisgICAgICAgPGxpc3RpdGVtPgorICAgICAgICA8 cGFyYT4KKyAgICAgICAgIFRoZSBMU04gb2YgdGhlIGFib3J0LiBUaGlzIGZpZWxkIGlzIGF2YWls YWJsZSBzaW5jZSBwcm90b2NvbCB2ZXJzaW9uCisgICAgICAgICA0LgorICAgICAgICA8L3BhcmE+ CisgICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgICA8dmFy bGlzdGVudHJ5PgorICAgICAgIDx0ZXJtPkludDY0IChUaW1lc3RhbXBUeik8L3Rlcm0+CisgICAg ICAgPGxpc3RpdGVtPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgIEFib3J0IHRpbWVzdGFtcCBv ZiB0aGUgdHJhbnNhY3Rpb24uIFRoZSB2YWx1ZSBpcyBpbiBudW1iZXIKKyAgICAgICAgIG9mIG1p Y3Jvc2Vjb25kcyBzaW5jZSBQb3N0Z3JlU1FMIGVwb2NoICgyMDAwLTAxLTAxKS4gVGhpcyBmaWVs ZCBpcworICAgICAgICAgYXZhaWxhYmxlIHNpbmNlIHByb3RvY29sIHZlcnNpb24gNC4KKyAgICAg ICAgPC9wYXJhPgorICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKwog ICAgICA8L3ZhcmlhYmxlbGlzdD4KICAgICA8L2xpc3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+ CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV9zdWJzY3JpcHRpb24uc2dtbCBi L2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3N1YnNjcmlwdGlvbi5zZ21sCmluZGV4IDkwYmQ3MDA1 MGQuLmViYTcyYzZhZjYgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3N1YnNj cmlwdGlvbi5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3N1YnNjcmlwdGlvbi5z Z21sCkBAIC0yMjgsMTMgKzIyOCwyOSBAQCBDUkVBVEUgU1VCU0NSSVBUSU9OIDxyZXBsYWNlYWJs ZSBjbGFzcz0icGFyYW1ldGVyIj5zdWJzY3JpcHRpb25fbmFtZTwvcmVwbGFjZWFibAogICAgICAg IDwvdmFybGlzdGVudHJ5PgogCiAgICAgICAgPHZhcmxpc3RlbnRyeT4KLSAgICAgICAgPHRlcm0+ PGxpdGVyYWw+c3RyZWFtaW5nPC9saXRlcmFsPiAoPHR5cGU+Ym9vbGVhbjwvdHlwZT4pPC90ZXJt PgorICAgICAgICA8dGVybT48bGl0ZXJhbD5zdHJlYW1pbmc8L2xpdGVyYWw+ICg8dHlwZT5lbnVt PC90eXBlPik8L3Rlcm0+CiAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgIDxwYXJhPgogICAg ICAgICAgIFNwZWNpZmllcyB3aGV0aGVyIHRvIGVuYWJsZSBzdHJlYW1pbmcgb2YgaW4tcHJvZ3Jl c3MgdHJhbnNhY3Rpb25zCi0gICAgICAgICAgZm9yIHRoaXMgc3Vic2NyaXB0aW9uLiAgQnkgZGVm YXVsdCwgYWxsIHRyYW5zYWN0aW9ucwotICAgICAgICAgIGFyZSBmdWxseSBkZWNvZGVkIG9uIHRo ZSBwdWJsaXNoZXIgYW5kIG9ubHkgdGhlbiBzZW50IHRvIHRoZQotICAgICAgICAgIHN1YnNjcmli ZXIgYXMgYSB3aG9sZS4KKyAgICAgICAgICBmb3IgdGhpcyBzdWJzY3JpcHRpb24uICBUaGUgZGVm YXVsdCB2YWx1ZSBpcyA8bGl0ZXJhbD5vZmY8L2xpdGVyYWw+LAorICAgICAgICAgIG1lYW5pbmcg YWxsIHRyYW5zYWN0aW9ucyBhcmUgZnVsbHkgZGVjb2RlZCBvbiB0aGUgcHVibGlzaGVyIGFuZCBv bmx5CisgICAgICAgICAgdGhlbiBzZW50IHRvIHRoZSBzdWJzY3JpYmVyIGFzIGEgd2hvbGUuCisg ICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgIDxwYXJhPgorICAgICAgICAgIElmIHNldCB0byA8 bGl0ZXJhbD5vbjwvbGl0ZXJhbD4sIHRoZSBpbmNvbWluZyBjaGFuZ2VzIGFyZSB3cml0dGVuIHRv CisgICAgICAgICAgdGVtcG9yYXJ5IGZpbGVzIGFuZCB0aGVuIGFwcGxpZWQgb25seSBhZnRlciB0 aGUgdHJhbnNhY3Rpb24gaXMKKyAgICAgICAgICBjb21taXR0ZWQgb24gdGhlIHB1Ymxpc2hlciBh bmQgcmVjZWl2ZWQgYnkgdGhlIHN1YnNjcmliZXIuCisgICAgICAgICA8L3BhcmE+CisKKyAgICAg ICAgIDxwYXJhPgorICAgICAgICAgIElmIHNldCB0byA8bGl0ZXJhbD5wYXJhbGxlbDwvbGl0ZXJh bD4sIGluY29taW5nIGNoYW5nZXMgYXJlIGRpcmVjdGx5CisgICAgICAgICAgYXBwbGllZCB2aWEg b25lIG9mIHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXJzLCBpZiBhdmFpbGFibGUuIElmIG5vCisg ICAgICAgICAgcGFyYWxsZWwgYXBwbHkgd29ya2VyIGlzIGZyZWUgdG8gaGFuZGxlIHN0cmVhbWlu ZyB0cmFuc2FjdGlvbnMgdGhlbgorICAgICAgICAgIHRoZSBjaGFuZ2VzIGFyZSB3cml0dGVuIHRv IHRlbXBvcmFyeSBmaWxlcyBhbmQgYXBwbGllZCBhZnRlciB0aGUKKyAgICAgICAgICB0cmFuc2Fj dGlvbiBpcyBjb21taXR0ZWQuIE5vdGUgdGhhdCBpZiBhbiBlcnJvciBoYXBwZW5zIGluIGEKKyAg ICAgICAgICBwYXJhbGxlbCBhcHBseSB3b3JrZXIsIHRoZSBmaW5pc2ggTFNOIG9mIHRoZSByZW1v dGUgdHJhbnNhY3Rpb24KKyAgICAgICAgICBtaWdodCBub3QgYmUgcmVwb3J0ZWQgaW4gdGhlIHNl cnZlciBsb2cuCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAg PC92YXJsaXN0ZW50cnk+CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvc3lzdGVtLXZpZXdzLnNn bWwgYi9kb2Mvc3JjL3NnbWwvc3lzdGVtLXZpZXdzLnNnbWwKaW5kZXggMTQzYWU1YjdiYi4uODQy OGVlNzg2NyAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3N5c3RlbS12aWV3cy5zZ21sCisrKyBi L2RvYy9zcmMvc2dtbC9zeXN0ZW0tdmlld3Muc2dtbApAQCAtMTM3OSw4ICsxMzc5LDkgQEAKICAg ICAgICA8bGl0ZXJhbD52aXJ0dWFseGlkPC9saXRlcmFsPiwKICAgICAgICA8bGl0ZXJhbD5zcGVj dG9rZW48L2xpdGVyYWw+LAogICAgICAgIDxsaXRlcmFsPm9iamVjdDwvbGl0ZXJhbD4sCi0gICAg ICAgPGxpdGVyYWw+dXNlcmxvY2s8L2xpdGVyYWw+LCBvcgotICAgICAgIDxsaXRlcmFsPmFkdmlz b3J5PC9saXRlcmFsPi4KKyAgICAgICA8bGl0ZXJhbD51c2VybG9jazwvbGl0ZXJhbD4sCisgICAg ICAgPGxpdGVyYWw+YWR2aXNvcnk8L2xpdGVyYWw+LCBvcgorICAgICAgIDxsaXRlcmFsPmFwcGx5 dHJhbnNhY3Rpb248L2xpdGVyYWw+LgogICAgICAgIChTZWUgYWxzbyA8eHJlZiBsaW5rZW5kPSJ3 YWl0LWV2ZW50LWxvY2stdGFibGUiLz4uKQogICAgICAgPC9wYXJhPjwvZW50cnk+CiAgICAgIDwv cm93PgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGFjdC5jIGIvc3Jj L2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGFjdC5jCmluZGV4IDI0MjIxNTQyZTcuLmZjZDJjMTk4 YTAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hhY3QuYworKysgYi9z cmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94YWN0LmMKQEAgLTE3MTIsNiArMTcxMiw3IEBAIFJl Y29yZFRyYW5zYWN0aW9uQWJvcnQoYm9vbCBpc1N1YlhhY3QpCiAJaW50CQkJbmNoaWxkcmVuOwog CVRyYW5zYWN0aW9uSWQgKmNoaWxkcmVuOwogCVRpbWVzdGFtcFR6IHhhY3RfdGltZTsKKwlib29s CQlyZXBsb3JpZ2luOwogCiAJLyoKIAkgKiBJZiB3ZSBoYXZlbid0IGJlZW4gYXNzaWduZWQgYW4g WElELCBub2JvZHkgd2lsbCBjYXJlIHdoZXRoZXIgd2UgYWJvcnRlZApAQCAtMTc0Miw2ICsxNzQz LDEzIEBAIFJlY29yZFRyYW5zYWN0aW9uQWJvcnQoYm9vbCBpc1N1YlhhY3QpCiAJCWVsb2coUEFO SUMsICJjYW5ub3QgYWJvcnQgdHJhbnNhY3Rpb24gJXUsIGl0IHdhcyBhbHJlYWR5IGNvbW1pdHRl ZCIsCiAJCQkgeGlkKTsKIAorCS8qCisJICogQXJlIHdlIHVzaW5nIHRoZSByZXBsaWNhdGlvbiBv cmlnaW5zIGZlYXR1cmU/ICBPciwgaW4gb3RoZXIgd29yZHMsIGFyZQorCSAqIHdlIHJlcGxheWlu ZyByZW1vdGUgYWN0aW9ucz8KKwkgKi8KKwlyZXBsb3JpZ2luID0gKHJlcGxvcmlnaW5fc2Vzc2lv bl9vcmlnaW4gIT0gSW52YWxpZFJlcE9yaWdpbklkICYmCisJCQkJICByZXBsb3JpZ2luX3Nlc3Np b25fb3JpZ2luICE9IERvTm90UmVwbGljYXRlSWQpOworCiAJLyogRmV0Y2ggdGhlIGRhdGEgd2Ug bmVlZCBmb3IgdGhlIGFib3J0IHJlY29yZCAqLwogCW5yZWxzID0gc21nckdldFBlbmRpbmdEZWxl dGVzKGZhbHNlLCAmcmVscyk7CiAJbmNoaWxkcmVuID0geGFjdEdldENvbW1pdHRlZENoaWxkcmVu KCZjaGlsZHJlbik7CkBAIC0xNzY1LDYgKzE3NzMsMTEgQEAgUmVjb3JkVHJhbnNhY3Rpb25BYm9y dChib29sIGlzU3ViWGFjdCkKIAkJCQkJICAgTXlYYWN0RmxhZ3MsIEludmFsaWRUcmFuc2FjdGlv bklkLAogCQkJCQkgICBOVUxMKTsKIAorCWlmIChyZXBsb3JpZ2luKQorCQkvKiBNb3ZlIExTTnMg Zm9yd2FyZCBmb3IgdGhpcyByZXBsaWNhdGlvbiBvcmlnaW4gKi8KKwkJcmVwbG9yaWdpbl9zZXNz aW9uX2FkdmFuY2UocmVwbG9yaWdpbl9zZXNzaW9uX29yaWdpbl9sc24sCisJCQkJCQkJCSAgIFhh Y3RMYXN0UmVjRW5kKTsKKwogCS8qCiAJICogUmVwb3J0IHRoZSBsYXRlc3QgYXN5bmMgYWJvcnQg TFNOLCBzbyB0aGF0IHRoZSBXQUwgd3JpdGVyIGtub3dzIHRvCiAJICogZmx1c2ggdGhpcyBhYm9y dC4gVGhlcmUncyBub3RoaW5nIHRvIGJlIGdhaW5lZCBieSBkZWxheWluZyB0aGlzLCBzaW5jZQpA QCAtNTg2NywxMSArNTg4MCwxMCBAQCBYYWN0TG9nQWJvcnRSZWNvcmQoVGltZXN0YW1wVHogYWJv cnRfdGltZSwKIAl9CiAKIAkvKgotCSAqIER1bXAgdHJhbnNhY3Rpb24gb3JpZ2luIGluZm9ybWF0 aW9uIG9ubHkgZm9yIGFib3J0IHByZXBhcmVkLiBXZSBuZWVkCi0JICogdGhpcyBkdXJpbmcgcmVj b3ZlcnkgdG8gdXBkYXRlIHRoZSByZXBsaWNhdGlvbiBvcmlnaW4gcHJvZ3Jlc3MuCisJICogRHVt cCB0cmFuc2FjdGlvbiBvcmlnaW4gaW5mb3JtYXRpb24uIFdlIG5lZWQgdGhpcyBkdXJpbmcgcmVj b3ZlcnkgdG8KKwkgKiB1cGRhdGUgdGhlIHJlcGxpY2F0aW9uIG9yaWdpbiBwcm9ncmVzcy4KIAkg Ki8KLQlpZiAoKHJlcGxvcmlnaW5fc2Vzc2lvbl9vcmlnaW4gIT0gSW52YWxpZFJlcE9yaWdpbklk KSAmJgotCQlUcmFuc2FjdGlvbklkSXNWYWxpZCh0d29waGFzZV94aWQpKQorCWlmIChyZXBsb3Jp Z2luX3Nlc3Npb25fb3JpZ2luICE9IEludmFsaWRSZXBPcmlnaW5JZCkKIAl7CiAJCXhsX3hpbmZv LnhpbmZvIHw9IFhBQ1RfWElORk9fSEFTX09SSUdJTjsKIApAQCAtNTkyOCw4ICs1OTQwLDggQEAg WGFjdExvZ0Fib3J0UmVjb3JkKFRpbWVzdGFtcFR6IGFib3J0X3RpbWUsCiAJaWYgKHhsX3hpbmZv LnhpbmZvICYgWEFDVF9YSU5GT19IQVNfT1JJR0lOKQogCQlYTG9nUmVnaXN0ZXJEYXRhKChjaGFy ICopICgmeGxfb3JpZ2luKSwgc2l6ZW9mKHhsX3hhY3Rfb3JpZ2luKSk7CiAKLQlpZiAoVHJhbnNh Y3Rpb25JZElzVmFsaWQodHdvcGhhc2VfeGlkKSkKLQkJWExvZ1NldFJlY29yZEZsYWdzKFhMT0df SU5DTFVERV9PUklHSU4pOworCS8qIEluY2x1ZGUgdGhlIHJlcGxpY2F0aW9uIG9yaWdpbiAqLwor CVhMb2dTZXRSZWNvcmRGbGFncyhYTE9HX0lOQ0xVREVfT1JJR0lOKTsKIAogCXJldHVybiBYTG9n SW5zZXJ0KFJNX1hBQ1RfSUQsIGluZm8pOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29t bWFuZHMvc3Vic2NyaXB0aW9uY21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvc3Vic2NyaXB0 aW9uY21kcy5jCmluZGV4IGI5YzVkZjc5NmYuLmJjMWIxOTg1OGMgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2NvbW1hbmRzL3N1YnNjcmlwdGlvbmNtZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21t YW5kcy9zdWJzY3JpcHRpb25jbWRzLmMKQEAgLTg0LDcgKzg0LDcgQEAgdHlwZWRlZiBzdHJ1Y3Qg U3ViT3B0cwogCWJvb2wJCWNvcHlfZGF0YTsKIAlib29sCQlyZWZyZXNoOwogCWJvb2wJCWJpbmFy eTsKLQlib29sCQlzdHJlYW1pbmc7CisJY2hhcgkJc3RyZWFtaW5nOwogCWJvb2wJCXR3b3BoYXNl OwogCWJvb2wJCWRpc2FibGVvbmVycjsKIAljaGFyCSAgICpvcmlnaW47CkBAIC0xMzgsNyArMTM4 LDcgQEAgcGFyc2Vfc3Vic2NyaXB0aW9uX29wdGlvbnMoUGFyc2VTdGF0ZSAqcHN0YXRlLCBMaXN0 ICpzdG10X29wdGlvbnMsCiAJaWYgKElzU2V0KHN1cHBvcnRlZF9vcHRzLCBTVUJPUFRfQklOQVJZ KSkKIAkJb3B0cy0+YmluYXJ5ID0gZmFsc2U7CiAJaWYgKElzU2V0KHN1cHBvcnRlZF9vcHRzLCBT VUJPUFRfU1RSRUFNSU5HKSkKLQkJb3B0cy0+c3RyZWFtaW5nID0gZmFsc2U7CisJCW9wdHMtPnN0 cmVhbWluZyA9IExPR0lDQUxSRVBfU1RSRUFNX09GRjsKIAlpZiAoSXNTZXQoc3VwcG9ydGVkX29w dHMsIFNVQk9QVF9UV09QSEFTRV9DT01NSVQpKQogCQlvcHRzLT50d29waGFzZSA9IGZhbHNlOwog CWlmIChJc1NldChzdXBwb3J0ZWRfb3B0cywgU1VCT1BUX0RJU0FCTEVfT05fRVJSKSkKQEAgLTI0 MSw3ICsyNDEsNyBAQCBwYXJzZV9zdWJzY3JpcHRpb25fb3B0aW9ucyhQYXJzZVN0YXRlICpwc3Rh dGUsIExpc3QgKnN0bXRfb3B0aW9ucywKIAkJCQllcnJvckNvbmZsaWN0aW5nRGVmRWxlbShkZWZl bCwgcHN0YXRlKTsKIAogCQkJb3B0cy0+c3BlY2lmaWVkX29wdHMgfD0gU1VCT1BUX1NUUkVBTUlO RzsKLQkJCW9wdHMtPnN0cmVhbWluZyA9IGRlZkdldEJvb2xlYW4oZGVmZWwpOworCQkJb3B0cy0+ c3RyZWFtaW5nID0gZGVmR2V0U3RyZWFtaW5nTW9kZShkZWZlbCk7CiAJCX0KIAkJZWxzZSBpZiAo c3RyY21wKGRlZmVsLT5kZWZuYW1lLCAidHdvX3BoYXNlIikgPT0gMCkKIAkJewpAQCAtNjI5LDcg KzYyOSw3IEBAIENyZWF0ZVN1YnNjcmlwdGlvbihQYXJzZVN0YXRlICpwc3RhdGUsIENyZWF0ZVN1 YnNjcmlwdGlvblN0bXQgKnN0bXQsCiAJdmFsdWVzW0FudW1fcGdfc3Vic2NyaXB0aW9uX3N1Ym93 bmVyIC0gMV0gPSBPYmplY3RJZEdldERhdHVtKG93bmVyKTsKIAl2YWx1ZXNbQW51bV9wZ19zdWJz Y3JpcHRpb25fc3ViZW5hYmxlZCAtIDFdID0gQm9vbEdldERhdHVtKG9wdHMuZW5hYmxlZCk7CiAJ dmFsdWVzW0FudW1fcGdfc3Vic2NyaXB0aW9uX3N1YmJpbmFyeSAtIDFdID0gQm9vbEdldERhdHVt KG9wdHMuYmluYXJ5KTsKLQl2YWx1ZXNbQW51bV9wZ19zdWJzY3JpcHRpb25fc3Vic3RyZWFtIC0g MV0gPSBCb29sR2V0RGF0dW0ob3B0cy5zdHJlYW1pbmcpOworCXZhbHVlc1tBbnVtX3BnX3N1YnNj cmlwdGlvbl9zdWJzdHJlYW0gLSAxXSA9IENoYXJHZXREYXR1bShvcHRzLnN0cmVhbWluZyk7CiAJ dmFsdWVzW0FudW1fcGdfc3Vic2NyaXB0aW9uX3N1YnR3b3BoYXNlc3RhdGUgLSAxXSA9CiAJCUNo YXJHZXREYXR1bShvcHRzLnR3b3BoYXNlID8KIAkJCQkJIExPR0lDQUxSRVBfVFdPUEhBU0VfU1RB VEVfUEVORElORyA6CkBAIC0xMDk4LDcgKzEwOTgsNyBAQCBBbHRlclN1YnNjcmlwdGlvbihQYXJz ZVN0YXRlICpwc3RhdGUsIEFsdGVyU3Vic2NyaXB0aW9uU3RtdCAqc3RtdCwKIAkJCQlpZiAoSXNT ZXQob3B0cy5zcGVjaWZpZWRfb3B0cywgU1VCT1BUX1NUUkVBTUlORykpCiAJCQkJewogCQkJCQl2 YWx1ZXNbQW51bV9wZ19zdWJzY3JpcHRpb25fc3Vic3RyZWFtIC0gMV0gPQotCQkJCQkJQm9vbEdl dERhdHVtKG9wdHMuc3RyZWFtaW5nKTsKKwkJCQkJCUNoYXJHZXREYXR1bShvcHRzLnN0cmVhbWlu Zyk7CiAJCQkJCXJlcGxhY2VzW0FudW1fcGdfc3Vic2NyaXB0aW9uX3N1YnN0cmVhbSAtIDFdID0g dHJ1ZTsKIAkJCQl9CiAKQEAgLTIxMjIsMyArMjEyMiw2MCBAQCBtZXJnZV9wdWJsaWNhdGlvbnMo TGlzdCAqb2xkcHVibGlzdCwgTGlzdCAqbmV3cHVibGlzdCwgYm9vbCBhZGRwdWIsIGNvbnN0IGNo YXIgKgogCiAJcmV0dXJuIG9sZHB1Ymxpc3Q7CiB9CisKKy8qCisgKiBFeHRyYWN0IHRoZSBzdHJl YW1pbmcgbW9kZSB2YWx1ZSBmcm9tIGEgRGVmRWxlbS4gIFRoaXMgaXMgbGlrZQorICogZGVmR2V0 Qm9vbGVhbigpIGJ1dCBhbHNvIGFjY2VwdHMgdGhlIHNwZWNpYWwgdmFsdWUgb2YgInBhcmFsbGVs Ii4KKyAqLworY2hhcgorZGVmR2V0U3RyZWFtaW5nTW9kZShEZWZFbGVtICpkZWYpCit7CisJLyoK KwkgKiBJZiBubyBwYXJhbWV0ZXIgdmFsdWUgZ2l2ZW4sIGFzc3VtZSAidHJ1ZSIgaXMgbWVhbnQu CisJICovCisJaWYgKCFkZWYtPmFyZykKKwkJcmV0dXJuIExPR0lDQUxSRVBfU1RSRUFNX09OOwor CisJLyoKKwkgKiBBbGxvdyAwLCAxLCAiZmFsc2UiLCAidHJ1ZSIsICJvZmYiLCAib24iIG9yICJw YXJhbGxlbCIuCisJICovCisJc3dpdGNoIChub2RlVGFnKGRlZi0+YXJnKSkKKwl7CisJCWNhc2Ug VF9JbnRlZ2VyOgorCQkJc3dpdGNoIChpbnRWYWwoZGVmLT5hcmcpKQorCQkJeworCQkJCWNhc2Ug MDoKKwkJCQkJcmV0dXJuIExPR0lDQUxSRVBfU1RSRUFNX09GRjsKKwkJCQljYXNlIDE6CisJCQkJ CXJldHVybiBMT0dJQ0FMUkVQX1NUUkVBTV9PTjsKKwkJCQlkZWZhdWx0OgorCQkJCQkvKiBvdGhl cndpc2UsIGVycm9yIG91dCBiZWxvdyAqLworCQkJCQlicmVhazsKKwkJCX0KKwkJCWJyZWFrOwor CQlkZWZhdWx0OgorCQkJeworCQkJCWNoYXIJICAgKnN2YWwgPSBkZWZHZXRTdHJpbmcoZGVmKTsK KworCQkJCS8qCisJCQkJICogVGhlIHNldCBvZiBzdHJpbmdzIGFjY2VwdGVkIGhlcmUgc2hvdWxk IG1hdGNoIHVwIHdpdGggdGhlCisJCQkJICogZ3JhbW1hcidzIG9wdF9ib29sZWFuX29yX3N0cmlu ZyBwcm9kdWN0aW9uLgorCQkJCSAqLworCQkJCWlmIChwZ19zdHJjYXNlY21wKHN2YWwsICJmYWxz ZSIpID09IDAgfHwKKwkJCQkJcGdfc3RyY2FzZWNtcChzdmFsLCAib2ZmIikgPT0gMCkKKwkJCQkJ cmV0dXJuIExPR0lDQUxSRVBfU1RSRUFNX09GRjsKKwkJCQlpZiAocGdfc3RyY2FzZWNtcChzdmFs LCAidHJ1ZSIpID09IDAgfHwKKwkJCQkJcGdfc3RyY2FzZWNtcChzdmFsLCAib24iKSA9PSAwKQor CQkJCQlyZXR1cm4gTE9HSUNBTFJFUF9TVFJFQU1fT047CisJCQkJaWYgKHBnX3N0cmNhc2VjbXAo c3ZhbCwgInBhcmFsbGVsIikgPT0gMCkKKwkJCQkJcmV0dXJuIExPR0lDQUxSRVBfU1RSRUFNX1BB UkFMTEVMOworCQkJfQorCQkJYnJlYWs7CisJfQorCisJZXJlcG9ydChFUlJPUiwKKwkJCShlcnJj b2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwKKwkJCSBlcnJtc2coIiVzIHJlcXVpcmVzIGEgQm9v bGVhbiB2YWx1ZSBvciBcInBhcmFsbGVsXCIiLAorCQkJCQlkZWYtPmRlZm5hbWUpKSk7CisJcmV0 dXJuIExPR0lDQUxSRVBfU1RSRUFNX09GRjsJLyoga2VlcCBjb21waWxlciBxdWlldCAqLworfQpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbGlicHEvcHFtcS5jIGIvc3JjL2JhY2tlbmQvbGlicHEv cHFtcS5jCmluZGV4IDc2NmVjYTk2NTcuLjM5ZTc3ZWY5NDUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2xpYnBxL3BxbXEuYworKysgYi9zcmMvYmFja2VuZC9saWJwcS9wcW1xLmMKQEAgLTEzLDEx ICsxMywxMyBAQAogCiAjaW5jbHVkZSAicG9zdGdyZXMuaCIKIAorI2luY2x1ZGUgImFjY2Vzcy9w YXJhbGxlbC5oIgogI2luY2x1ZGUgImxpYnBxL2xpYnBxLmgiCiAjaW5jbHVkZSAibGlicHEvcHFm b3JtYXQuaCIKICNpbmNsdWRlICJsaWJwcS9wcW1xLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgi CiAjaW5jbHVkZSAicGdzdGF0LmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vbG9naWNhbHdvcmtl ci5oIgogI2luY2x1ZGUgInRjb3AvdGNvcHByb3QuaCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlu cy5oIgogCkBAIC0xNjIsOSArMTY0LDE5IEBAIG1xX3B1dG1lc3NhZ2UoY2hhciBtc2d0eXBlLCBj b25zdCBjaGFyICpzLCBzaXplX3QgbGVuKQogCQlyZXN1bHQgPSBzaG1fbXFfc2VuZHYocHFfbXFf aGFuZGxlLCBpb3YsIDIsIHRydWUsIHRydWUpOwogCiAJCWlmIChwcV9tcV9wYXJhbGxlbF9sZWFk ZXJfcGlkICE9IDApCi0JCQlTZW5kUHJvY1NpZ25hbChwcV9tcV9wYXJhbGxlbF9sZWFkZXJfcGlk LAotCQkJCQkJICAgUFJPQ1NJR19QQVJBTExFTF9NRVNTQUdFLAotCQkJCQkJICAgcHFfbXFfcGFy YWxsZWxfbGVhZGVyX2JhY2tlbmRfaWQpOworCQl7CisJCQlpZiAoSXNMb2dpY2FsUGFyYWxsZWxB cHBseVdvcmtlcigpKQorCQkJCVNlbmRQcm9jU2lnbmFsKHBxX21xX3BhcmFsbGVsX2xlYWRlcl9w aWQsCisJCQkJCQkJICAgUFJPQ1NJR19QQVJBTExFTF9BUFBMWV9NRVNTQUdFLAorCQkJCQkJCSAg IHBxX21xX3BhcmFsbGVsX2xlYWRlcl9iYWNrZW5kX2lkKTsKKwkJCWVsc2UKKwkJCXsKKwkJCQlB c3NlcnQoSXNQYXJhbGxlbFdvcmtlcigpKTsKKwkJCQlTZW5kUHJvY1NpZ25hbChwcV9tcV9wYXJh bGxlbF9sZWFkZXJfcGlkLAorCQkJCQkJCSAgIFBST0NTSUdfUEFSQUxMRUxfTUVTU0FHRSwKKwkJ CQkJCQkgICBwcV9tcV9wYXJhbGxlbF9sZWFkZXJfYmFja2VuZF9pZCk7CisJCQl9CisJCX0KIAog CQlpZiAocmVzdWx0ICE9IFNITV9NUV9XT1VMRF9CTE9DSykKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9iZ3dvcmtlci5jIGIvc3JjL2JhY2tlbmQvcG9zdG1h c3Rlci9iZ3dvcmtlci5jCmluZGV4IDZmOGUzNDQ1MDkuLmU3YTRhNzEzNmEgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYmd3b3JrZXIuYworKysgYi9zcmMvYmFja2VuZC9wb3N0 bWFzdGVyL2Jnd29ya2VyLmMKQEAgLTEyOCw2ICsxMjgsOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0 CiAJfSwKIAl7CiAJCSJBcHBseVdvcmtlck1haW4iLCBBcHBseVdvcmtlck1haW4KKwl9LAorCXsK KwkJIlBhcmFsbGVsQXBwbHlXb3JrZXJNYWluIiwgUGFyYWxsZWxBcHBseVdvcmtlck1haW4KIAl9 CiB9OwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2ludGVycnVwdC5jIGIv c3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9pbnRlcnJ1cHQuYwppbmRleCAyZWU4OTZmYzgwLi42ZDRi ZDc2YmY4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2ludGVycnVwdC5jCisr KyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvaW50ZXJydXB0LmMKQEAgLTk4LDggKzk4LDkgQEAg U2lnbmFsSGFuZGxlckZvckNyYXNoRXhpdChTSUdOQUxfQVJHUykKICAqIHNodXQgZG93biBhbmQg ZXhpdC4KICAqCiAgKiBUeXBpY2FsbHksIHRoaXMgaGFuZGxlciB3b3VsZCBiZSB1c2VkIGZvciBT SUdURVJNLCBidXQgc29tZSBwcm9jZXNzZXMgdXNlCi0gKiBvdGhlciBzaWduYWxzLiBJbiBwYXJ0 aWN1bGFyLCB0aGUgY2hlY2twb2ludGVyIGV4aXRzIG9uIFNJR1VTUjIsIGFuZCB0aGUKLSAqIFdB TCB3cml0ZXIgZXhpdHMgb24gZWl0aGVyIFNJR0lOVCBvciBTSUdURVJNLgorICogb3RoZXIgc2ln bmFscy4gSW4gcGFydGljdWxhciwgdGhlIGNoZWNrcG9pbnRlciBleGl0cyBvbiBTSUdVU1IyLCBh bmQgdGhlIFdBTAorICogd3JpdGVyIGFuZCB0aGUgbG9naWNhbCByZXBsaWNhdGlvbiBwYXJhbGxl bCBhcHBseSB3b3JrZXIgZXhpdHMgb24gZWl0aGVyCisgKiBTSUdJTlQgb3IgU0lHVEVSTS4KICAq CiAgKiBTaHV0ZG93blJlcXVlc3RQZW5kaW5nIHNob3VsZCBiZSBjaGVja2VkIGF0IGEgY29udmVu aWVudCBwbGFjZSB3aXRoaW4gdGhlCiAgKiBtYWluIGxvb3AsIG9yIGVsc2UgdGhlIG1haW4gbG9v cCBzaG91bGQgY2FsbCBIYW5kbGVNYWluTG9vcEludGVycnVwdHMuCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9yZXBsaWNhdGlvbi9saWJwcXdhbHJlY2VpdmVyL2xpYnBxd2FscmVjZWl2ZXIuYyBi L3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xpYnBxd2FscmVjZWl2ZXIvbGlicHF3YWxyZWNlaXZl ci5jCmluZGV4IDIxOWNkNzNiN2YuLmM0MGM2MjIwZGIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L3JlcGxpY2F0aW9uL2xpYnBxd2FscmVjZWl2ZXIvbGlicHF3YWxyZWNlaXZlci5jCisrKyBiL3Ny Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xpYnBxd2FscmVjZWl2ZXIvbGlicHF3YWxyZWNlaXZlci5j CkBAIC00NDMsOSArNDQzLDkgQEAgbGlicHFyY3Zfc3RhcnRzdHJlYW1pbmcoV2FsUmVjZWl2ZXJD b25uICpjb25uLAogCQlhcHBlbmRTdHJpbmdJbmZvKCZjbWQsICJwcm90b192ZXJzaW9uICcldSci LAogCQkJCQkJIG9wdGlvbnMtPnByb3RvLmxvZ2ljYWwucHJvdG9fdmVyc2lvbik7CiAKLQkJaWYg KG9wdGlvbnMtPnByb3RvLmxvZ2ljYWwuc3RyZWFtaW5nICYmCi0JCQlQUXNlcnZlclZlcnNpb24o Y29ubi0+c3RyZWFtQ29ubikgPj0gMTQwMDAwKQotCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygm Y21kLCAiLCBzdHJlYW1pbmcgJ29uJyIpOworCQlpZiAob3B0aW9ucy0+cHJvdG8ubG9naWNhbC5z dHJlYW1pbmdfc3RyKQorCQkJYXBwZW5kU3RyaW5nSW5mbygmY21kLCAiLCBzdHJlYW1pbmcgJyVz JyIsCisJCQkJCQkJIG9wdGlvbnMtPnByb3RvLmxvZ2ljYWwuc3RyZWFtaW5nX3N0cik7CiAKIAkJ aWYgKG9wdGlvbnMtPnByb3RvLmxvZ2ljYWwudHdvcGhhc2UgJiYKIAkJCVBRc2VydmVyVmVyc2lv bihjb25uLT5zdHJlYW1Db25uKSA+PSAxNTAwMDApCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi9sb2dpY2FsL01ha2VmaWxlIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9n aWNhbC9NYWtlZmlsZQppbmRleCBjNGUyZmRlYjcxLi4yZGMyNWUzN2JiIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL01ha2VmaWxlCisrKyBiL3NyYy9iYWNrZW5k L3JlcGxpY2F0aW9uL2xvZ2ljYWwvTWFrZWZpbGUKQEAgLTE1LDYgKzE1LDcgQEAgaW5jbHVkZSAk KHRvcF9idWlsZGRpcikvc3JjL01ha2VmaWxlLmdsb2JhbAogb3ZlcnJpZGUgQ1BQRkxBR1MgOj0g LUkkKHNyY2RpcikgJChDUFBGTEFHUykKIAogT0JKUyA9IFwKKwlhcHBseXBhcmFsbGVsd29ya2Vy Lm8gXAogCWRlY29kZS5vIFwKIAlsYXVuY2hlci5vIFwKIAlsb2dpY2FsLm8gXApkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9hcHBseXBhcmFsbGVsd29ya2VyLmMg Yi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2FwcGx5cGFyYWxsZWx3b3JrZXIuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi4yMTU1ODRjZmFlCi0tLSAvZGV2 L251bGwKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9hcHBseXBhcmFsbGVs d29ya2VyLmMKQEAgLTAsMCArMSwxNjIyIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIGFwcGx5 cGFyYWxsZWx3b3JrZXIuYworICoJICAgU3VwcG9ydCByb3V0aW5lcyBmb3IgYXBwbHlpbmcgeGFj dCBieSBwYXJhbGxlbCBhcHBseSB3b3JrZXIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMjMsIFBv c3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICogSURFTlRJRklDQVRJT04K KyAqCSAgc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9hcHBseXBhcmFsbGVsd29ya2Vy LmMKKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGNvZGUgdG8gbGF1bmNoLCBzZXQgdXAs IGFuZCB0ZWFyZG93biBhIHBhcmFsbGVsIGFwcGx5CisgKiB3b3JrZXIgd2hpY2ggcmVjZWl2ZXMg dGhlIGNoYW5nZXMgZnJvbSB0aGUgbGVhZGVyIHdvcmtlciBhbmQgaW52b2tlcyByb3V0aW5lcwor ICogdG8gYXBwbHkgdGhvc2Ugb24gdGhlIHN1YnNjcmliZXIgZGF0YWJhc2UuIEFkZGl0aW9uYWxs eSwgdGhpcyBmaWxlIGNvbnRhaW5zCisgKiByb3V0aW5lcyB0aGF0IGFyZSBpbnRlbmRlZCB0byBz dXBwb3J0IHNldHRpbmcgdXAsIHVzaW5nLCBhbmQgdGVhcmluZyBkb3duIGEKKyAqIFBhcmFsbGVs QXBwbHlXb3JrZXJJbmZvIHdoaWNoIGlzIHJlcXVpcmVkIHNvIHRoZSBsZWFkZXIgd29ya2VyIGFu ZCBwYXJhbGxlbAorICogYXBwbHkgd29ya2VycyBjYW4gY29tbXVuaWNhdGUgd2l0aCBlYWNoIG90 aGVyLgorICoKKyAqIFRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXJzIGFyZSBhc3NpZ25lZCAoaWYg YXZhaWxhYmxlKSBhcyBzb29uIGFzIHhhY3QncworICogZmlyc3Qgc3RyZWFtIGlzIHJlY2VpdmVk IGZvciBzdWJzY3JpcHRpb25zIHRoYXQgaGF2ZSBzZXQgdGhlaXIgJ3N0cmVhbWluZycKKyAqIG9w dGlvbiBhcyBwYXJhbGxlbC4gVGhlIGxlYWRlciBhcHBseSB3b3JrZXIgd2lsbCBzZW5kIGNoYW5n ZXMgdG8gdGhpcyBuZXcKKyAqIHdvcmtlciB2aWEgc2hhcmVkIG1lbW9yeS4gV2Uga2VlcCB0aGlz IHdvcmtlciBhc3NpZ25lZCB0aWxsIHRoZSB0cmFuc2FjdGlvbgorICogY29tbWl0IGlzIHJlY2Vp dmVkIGFuZCBhbHNvIHdhaXQgZm9yIHRoZSB3b3JrZXIgdG8gZmluaXNoIGF0IGNvbW1pdC4gVGhp cworICogcHJlc2VydmVzIGNvbW1pdCBvcmRlcmluZyBhbmQgYXZvaWQgZmlsZSBJL08gaW4gbW9z dCBjYXNlcywgYWx0aG91Z2ggd2UKKyAqIHN0aWxsIG5lZWQgdG8gc3BpbGwgdG8gYSBmaWxlIGlm IHRoZXJlIGlzIG5vIHdvcmtlciBhdmFpbGFibGUuIFNlZSBjb21tZW50cworICogYXRvcCBsb2dp Y2FsL3dvcmtlciB0byBrbm93IG1vcmUgYWJvdXQgc3RyZWFtZWQgeGFjdHMgd2hvc2UgY2hhbmdl cyBhcmUKKyAqIHNwaWxsZWQgdG8gZGlzay4gSXQgaXMgaW1wb3J0YW50IHRvIG1haW50YWluIGNv bW1pdCBvcmRlciB0byBhdm9pZCBmYWlsdXJlcworICogZHVlIHRvOiAoYSkgdHJhbnNhY3Rpb24g ZGVwZW5kZW5jaWVzIC0gc2F5IGlmIHdlIGluc2VydCBhIHJvdyBpbiB0aGUgZmlyc3QKKyAqIHRy YW5zYWN0aW9uIGFuZCB1cGRhdGUgaXQgaW4gdGhlIHNlY29uZCB0cmFuc2FjdGlvbiBvbiBwdWJs aXNoZXIgdGhlbgorICogYWxsb3dpbmcgdGhlIHN1YnNjcmliZXIgdG8gYXBwbHkgYm90aCBpbiBw YXJhbGxlbCBjYW4gbGVhZCB0byBmYWlsdXJlIGluIHRoZQorICogdXBkYXRlOyAoYikgZGVhZGxv Y2tzIC0gYWxsb3dpbmcgdHJhbnNhY3Rpb25zIHRoYXQgdXBkYXRlIHRoZSBzYW1lIHNldCBvZgor ICogcm93cy90YWJsZXMgaW4gdGhlIG9wcG9zaXRlIG9yZGVyIHRvIGJlIGFwcGxpZWQgaW4gcGFy YWxsZWwgY2FuIGxlYWQgdG8KKyAqIGRlYWRsb2Nrcy4KKyAqCisgKiBBIHdvcmtlciBwb29sIGlz IHVzZWQgdG8gYXZvaWQgcmVzdGFydGluZyB3b3JrZXJzIGZvciBlYWNoIHN0cmVhbWluZworICog dHJhbnNhY3Rpb24uIFdlIG1haW50YWluIGVhY2ggd29ya2VyJ3MgaW5mb3JtYXRpb24gKFBhcmFs bGVsQXBwbHlXb3JrZXJJbmZvKQorICogaW4gdGhlIFBhcmFsbGVsQXBwbHlXb3JrZXJQb29sLiBB ZnRlciBzdWNjZXNzZnVsbHkgbGF1bmNoaW5nIGEgbmV3IHdvcmtlciwKKyAqIGl0cyBpbmZvcm1h dGlvbiBpcyBhZGRlZCB0byB0aGUgUGFyYWxsZWxBcHBseVdvcmtlclBvb2wuIE9uY2UgdGhlIHdv cmtlcgorICogZmluaXNoZXMgYXBwbHlpbmcgdGhlIHRyYW5zYWN0aW9uLCBpdCBpcyBtYXJrZWQg YXMgYXZhaWxhYmxlIGZvciByZS11c2UuCisgKiBOb3csIGJlZm9yZSBzdGFydGluZyBhIG5ldyB3 b3JrZXIgdG8gYXBwbHkgdGhlIHN0cmVhbWluZyB0cmFuc2FjdGlvbiwgd2UKKyAqIGNoZWNrIHRo ZSBsaXN0IGZvciBhbnkgYXZhaWxhYmxlIHdvcmtlci4gTm90ZSB0aGF0IHdlIHJldGFpbiBhIG1h eGltdW0gb2YKKyAqIGhhbGYgdGhlIG1heF9wYXJhbGxlbF9hcHBseV93b3JrZXJzX3Blcl9zdWJz Y3JpcHRpb24gd29ya2VycyBpbiB0aGUgcG9vbCBhbmQKKyAqIGFmdGVyIHRoYXQsIHdlIHNpbXBs eSBleGl0IHRoZSB3b3JrZXIgYWZ0ZXIgYXBwbHlpbmcgdGhlIHRyYW5zYWN0aW9uLgorICoKKyAq IFhYWCBUaGlzIHdvcmtlciBwb29sIHRocmVzaG9sZCBpcyBhcmJpdHJhcnkgYW5kIHdlIGNhbiBw cm92aWRlIGEgR1VDCisgKiB2YXJpYWJsZSBmb3IgdGhpcyBpbiB0aGUgZnV0dXJlIGlmIHJlcXVp cmVkLgorICoKKyAqIFRoZSBsZWFkZXIgYXBwbHkgd29ya2VyIHdpbGwgY3JlYXRlIGEgc2VwYXJh dGUgZHluYW1pYyBzaGFyZWQgbWVtb3J5IHNlZ21lbnQKKyAqIHdoZW4gZWFjaCBwYXJhbGxlbCBh cHBseSB3b3JrZXIgc3RhcnRzLiBUaGUgcmVhc29uIGZvciB0aGlzIGRlc2lnbiBpcyB0aGF0Cisg KiB3ZSBjYW5ub3QgcHJlZGljdCBob3cgbWFueSB3b3JrZXJzIHdpbGwgYmUgbmVlZGVkLiBJdCBt YXkgYmUgcG9zc2libGUgdG8KKyAqIGFsbG9jYXRlIGVub3VnaCBzaGFyZWQgbWVtb3J5IGluIG9u ZSBzZWdtZW50IGJhc2VkIG9uIHRoZSBtYXhpbXVtIG51bWJlciBvZgorICogcGFyYWxsZWwgYXBw bHkgd29ya2VycyAobWF4X3BhcmFsbGVsX2FwcGx5X3dvcmtlcnNfcGVyX3N1YnNjcmlwdGlvbiks IGJ1dAorICogdGhpcyB3b3VsZCB3YXN0ZSBtZW1vcnkgaWYgbm8gcHJvY2VzcyBpcyBhY3R1YWxs eSBzdGFydGVkLgorICoKKyAqIFRoZSBkeW5hbWljIHNoYXJlZCBtZW1vcnkgc2VnbWVudCBjb250 YWluczogKGEpIGEgc2htX21xIHRoYXQgaXMgdXNlZCB0bworICogc2VuZCBjaGFuZ2VzIGluIHRo ZSB0cmFuc2FjdGlvbiBmcm9tIGxlYWRlciBhcHBseSB3b3JrZXIgdG8gcGFyYWxsZWwgYXBwbHkK KyAqIHdvcmtlcjsgKGIpIGFub3RoZXIgc2htX21xIHRoYXQgaXMgdXNlZCB0byBzZW5kIGVycm9y cyAoYW5kIG90aGVyIG1lc3NhZ2VzCisgKiByZXBvcnRlZCB2aWEgZWxvZy9lcmVwb3J0KSBmcm9t IHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgdG8gbGVhZGVyIGFwcGx5CisgKiB3b3JrZXI7IChj KSBuZWNlc3NhcnkgaW5mb3JtYXRpb24gdG8gYmUgc2hhcmVkIGFtb25nIHBhcmFsbGVsIGFwcGx5 IHdvcmtlcnMKKyAqIGFuZCB0aGUgbGVhZGVyIGFwcGx5IHdvcmtlciAoaS5lLiBtZW1iZXJzIG9m IFBhcmFsbGVsQXBwbHlXb3JrZXJTaGFyZWQpLgorICoKKyAqIExvY2tpbmcgQ29uc2lkZXJhdGlv bnMKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFdlIGhhdmUgYSByaXNrIG9mIGRlYWRs b2NrIGR1ZSB0byBjb25jdXJyZW50bHkgYXBwbHlpbmcgdGhlIHRyYW5zYWN0aW9ucyBpbgorICog cGFyYWxsZWwgbW9kZSB0aGF0IHdlcmUgaW5kZXBlbmRlbnQgb24gdGhlIHB1Ymxpc2hlciBzaWRl IGJ1dCBiZWNhbWUKKyAqIGRlcGVuZGVudCBvbiB0aGUgc3Vic2NyaWJlciBzaWRlIGR1ZSB0byB0 aGUgZGlmZmVyZW50IGRhdGFiYXNlIHN0cnVjdHVyZXMKKyAqIChsaWtlIHNjaGVtYSBvZiBzdWJz Y3JpcHRpb24gdGFibGVzLCBjb25zdHJhaW50cywgZXRjLikgb24gZWFjaCBzaWRlLiBUaGlzCisg KiBjYW4gaGFwcGVuIGV2ZW4gd2l0aG91dCBwYXJhbGxlbCBtb2RlIHdoZW4gdGhlcmUgYXJlIGNv bmN1cnJlbnQgb3BlcmF0aW9ucworICogb24gdGhlIHN1YnNjcmliZXIuIEluIG9yZGVyIHRvIGRl dGVjdCB0aGUgZGVhZGxvY2tzIGFtb25nIGxlYWRlciAoTEEpIGFuZAorICogcGFyYWxsZWwgYXBw bHkgKFBBKSB3b3JrZXJzLCB3ZSB1c2VkIGxtZ3IgbG9ja3Mgd2hlbiB0aGUgUEEgd2FpdHMgZm9y IHRoZQorICogbmV4dCBzdHJlYW0gKHNldCBvZiBjaGFuZ2VzKSBhbmQgTEEgd2FpdHMgZm9yIFBB IHRvIGZpbmlzaCB0aGUgdHJhbnNhY3Rpb24uCisgKiBBbiBhbHRlcm5hdGl2ZSBhcHByb2FjaCBj b3VsZCBiZSB0byBub3QgYWxsb3cgcGFyYWxsZWxpc20gd2hlbiB0aGUgc2NoZW1hIG9mCisgKiB0 YWJsZXMgaXMgZGlmZmVyZW50IGJldHdlZW4gdGhlIHB1Ymxpc2hlciBhbmQgc3Vic2NyaWJlciBi dXQgdGhhdCB3b3VsZCBiZQorICogdG9vIHJlc3RyaWN0aXZlIGFuZCB3b3VsZCByZXF1aXJlIHRo ZSBwdWJsaXNoZXIgdG8gc2VuZCBtdWNoIG1vcmUKKyAqIGluZm9ybWF0aW9uIHRoYW4gaXQgaXMg Y3VycmVudGx5IHNlbmRpbmcuCisgKgorICogQ29uc2lkZXIgYSBjYXNlIHdoZXJlIHRoZSBzdWJz Y3JpYmVkIHRhYmxlIGRvZXMgbm90IGhhdmUgYSB1bmlxdWUga2V5IG9uIHRoZQorICogcHVibGlz aGVyIGFuZCBoYXMgYSB1bmlxdWUga2V5IG9uIHRoZSBzdWJzY3JpYmVyLiBUaGUgZGVhZGxvY2sg Y2FuIGhhcHBlbiBpbgorICogdGhlIGZvbGxvd2luZyB3YXlzOgorICoKKyAqIDEpIERlYWRsb2Nr IGJldHdlZW4gdGhlIGxlYWRlciBhcHBseSB3b3JrZXIgYW5kIGEgcGFyYWxsZWwgYXBwbHkgd29y a2VyCisgKgorICogQ29uc2lkZXIgdGhhdCB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyIChQQSkg aXMgZXhlY3V0aW5nIFRYLTEgYW5kIHRoZQorICogbGVhZGVyIGFwcGx5IHdvcmtlciAoTEEpIGlz IGV4ZWN1dGluZyBUWC0yIGNvbmN1cnJlbnRseSBvbiB0aGUgc3Vic2NyaWJlci4KKyAqIE5vdywg TEEgaXMgd2FpdGluZyBmb3IgUEEgYmVjYXVzZSBvZiB0aGUgdW5pcXVlIGtleSBjb25zdHJhaW50 IG9mIHRoZQorICogc3Vic2NyaWJlZCB0YWJsZSB3aGlsZSBQQSBpcyB3YWl0aW5nIGZvciBMQSB0 byBzZW5kIHRoZSBuZXh0IHN0cmVhbSBvZgorICogY2hhbmdlcyBvciB0cmFuc2FjdGlvbiBmaW5p c2ggY29tbWFuZCBtZXNzYWdlLgorICoKKyAqIEluIG9yZGVyIGZvciBsbWdyIHRvIGRldGVjdCB0 aGlzLCB3ZSBoYXZlIExBIGFjcXVpcmUgYSBzZXNzaW9uIGxvY2sgb24gdGhlCisgKiByZW1vdGUg dHJhbnNhY3Rpb24gKGJ5IHBhX2xvY2tfc3RyZWFtKCkpIGFuZCBoYXZlIFBBIHdhaXQgb24gdGhl IGxvY2sgYmVmb3JlCisgKiB0cnlpbmcgdG8gcmVjZWl2ZSB0aGUgbmV4dCBzdHJlYW0gb2YgY2hh bmdlcy4gU3BlY2lmaWNhbGx5LCBMQSB3aWxsIGFjcXVpcmUKKyAqIHRoZSBsb2NrIGluIEFjY2Vz c0V4Y2x1c2l2ZSBtb2RlIGJlZm9yZSBzZW5kaW5nIHRoZSBTVFJFQU1fU1RPUCBhbmQgd2lsbAor ICogcmVsZWFzZSBpdCBpZiBhbHJlYWR5IGFjcXVpcmVkIGFmdGVyIHNlbmRpbmcgdGhlIFNUUkVB TV9TVEFSVCwgU1RSRUFNX0FCT1JUCisgKiAoZm9yIHRvcGxldmVsIHRyYW5zYWN0aW9uKSwgU1RS RUFNX1BSRVBBUkUsIGFuZCBTVFJFQU1fQ09NTUlULiBUaGUgUEEgd2lsbAorICogYWNxdWlyZSB0 aGUgbG9jayBpbiBBY2Nlc3NTaGFyZSBtb2RlIGFmdGVyIHByb2Nlc3NpbmcgU1RSRUFNX1NUT1Ag YW5kCisgKiBTVFJFQU1fQUJPUlQgKGZvciBzdWJ0cmFuc2FjdGlvbikgYW5kIHRoZW4gcmVsZWFz ZSB0aGUgbG9jayBpbW1lZGlhdGVseQorICogYWZ0ZXIgYWNxdWlyaW5nIGl0LgorICoKKyAqIFRo ZSBsb2NrIGdyYXBoIGZvciB0aGUgYWJvdmUgZXhhbXBsZSB3aWxsIGxvb2sgYXMgZm9sbG93czoK KyAqIExBICh3YWl0aW5nIHRvIGFjcXVpcmUgdGhlIGxvY2sgb24gdGhlIHVuaXF1ZSBpbmRleCkg LT4gUEEgKHdhaXRpbmcgdG8KKyAqIGFjcXVpcmUgdGhlIHN0cmVhbSBsb2NrKSAtPiBMQQorICoK KyAqIFRoaXMgd2F5LCB3aGVuIFBBIGlzIHdhaXRpbmcgZm9yIExBIGZvciB0aGUgbmV4dCBzdHJl YW0gb2YgY2hhbmdlcywgd2UgY2FuCisgKiBoYXZlIGEgd2FpdC1lZGdlIGZyb20gUEEgdG8gTEEg aW4gbG1nciwgd2hpY2ggd2lsbCBtYWtlIHVzIGRldGVjdCB0aGUKKyAqIGRlYWRsb2NrIGJldHdl ZW4gTEEgYW5kIFBBLgorICoKKyAqIDIpIERlYWRsb2NrIGJldHdlZW4gdGhlIGxlYWRlciBhcHBs eSB3b3JrZXIgYW5kIHBhcmFsbGVsIGFwcGx5IHdvcmtlcnMKKyAqCisgKiBUaGlzIHNjZW5hcmlv IGlzIHNpbWlsYXIgdG8gdGhlIGZpcnN0IGNhc2UgYnV0IFRYLTEgYW5kIFRYLTIgYXJlIGV4ZWN1 dGVkIGJ5CisgKiB0d28gcGFyYWxsZWwgYXBwbHkgd29ya2VycyAoUEEtMSBhbmQgUEEtMiByZXNw ZWN0aXZlbHkpLiBJbiB0aGlzIHNjZW5hcmlvLAorICogUEEtMiBpcyB3YWl0aW5nIGZvciBQQS0x IHRvIGNvbXBsZXRlIGl0cyB0cmFuc2FjdGlvbiB3aGlsZSBQQS0xIGlzIHdhaXRpbmcKKyAqIGZv ciBzdWJzZXF1ZW50IGlucHV0IGZyb20gTEEuIEFsc28sIExBIGlzIHdhaXRpbmcgZm9yIFBBLTIg dG8gY29tcGxldGUgaXRzCisgKiB0cmFuc2FjdGlvbiBpbiBvcmRlciB0byBwcmVzZXJ2ZSB0aGUg Y29tbWl0IG9yZGVyLiBUaGVyZSBpcyBhIGRlYWRsb2NrIGFtb25nCisgKiB0aGUgdGhyZWUgcHJv Y2Vzc2VzLgorICoKKyAqIEluIG9yZGVyIGZvciBsbWdyIHRvIGRldGVjdCB0aGlzLCB3ZSBoYXZl IFBBIGFjcXVpcmUgYSBzZXNzaW9uIGxvY2sgKHRoaXMgaXMKKyAqIGEgZGlmZmVyZW50IGxvY2sg dGhhbiByZWZlcnJlZCBpbiB0aGUgcHJldmlvdXMgY2FzZSwgc2VlCisgKiBwYV9sb2NrX3RyYW5z YWN0aW9uKCkpIG9uIHRoZSB0cmFuc2FjdGlvbiBiZWluZyBhcHBsaWVkIGFuZCBoYXZlIExBIHdh aXQgb24KKyAqIHRoZSBsb2NrIGJlZm9yZSBwcm9jZWVkaW5nIGluIHRoZSB0cmFuc2FjdGlvbiBm aW5pc2ggY29tbWFuZHMuIFNwZWNpZmljYWxseSwKKyAqIFBBIHdpbGwgYWNxdWlyZSB0aGlzIGxv Y2sgaW4gQWNjZXNzRXhjbHVzaXZlIG1vZGUgYmVmb3JlIGV4ZWN1dGluZyB0aGUgZmlyc3QKKyAq IG1lc3NhZ2Ugb2YgdGhlIHRyYW5zYWN0aW9uIGFuZCByZWxlYXNlIGl0IGF0IHRoZSB4YWN0IGVu ZC4gTEEgd2lsbCBhY3F1aXJlCisgKiB0aGlzIGxvY2sgaW4gQWNjZXNzU2hhcmUgbW9kZSBhdCB0 cmFuc2FjdGlvbiBmaW5pc2ggY29tbWFuZHMgYW5kIHJlbGVhc2UgaXQKKyAqIGltbWVkaWF0ZWx5 LgorICoKKyAqIFRoZSBsb2NrIGdyYXBoIGZvciB0aGUgYWJvdmUgZXhhbXBsZSB3aWxsIGxvb2sg YXMgZm9sbG93czoKKyAqIExBICh3YWl0aW5nIHRvIGFjcXVpcmUgdGhlIHRyYW5zYWN0aW9uIGxv Y2spIC0+IFBBLTIgKHdhaXRpbmcgdG8gYWNxdWlyZSB0aGUKKyAqIGxvY2sgZHVlIHRvIHVuaXF1 ZSBpbmRleCBjb25zdHJhaW50KSAtPiBQQS0xICh3YWl0aW5nIHRvIGFjcXVpcmUgdGhlIHN0cmVh bQorICogbG9jaykgLT4gTEEKKyAqCisgKiBUaGlzIHdheSB3aGVuIExBIGlzIHdhaXRpbmcgdG8g ZmluaXNoIHRoZSB0cmFuc2FjdGlvbiBlbmQgY29tbWFuZCB0byBwcmVzZXJ2ZQorICogdGhlIGNv bW1pdCBvcmRlciwgd2Ugd2lsbCBiZSBhYmxlIHRvIGRldGVjdCBkZWFkbG9jaywgaWYgYW55Lgor ICoKKyAqIE9uZSBtaWdodCB0aGluayB3ZSBjYW4gdXNlIFhhY3RMb2NrVGFibGVXYWl0KCksIGJ1 dCBYYWN0TG9ja1RhYmxlV2FpdCgpCisgKiBjb25zaWRlcnMgUFJFUEFSRUQgVFJBTlNBQ1RJT04g YXMgc3RpbGwgaW4gcHJvZ3Jlc3Mgd2hpY2ggbWVhbnMgdGhlIGxvY2sKKyAqIHdvbid0IGJlIHJl bGVhc2VkIGV2ZW4gYWZ0ZXIgdGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlciBoYXMgcHJlcGFyZWQg dGhlCisgKiB0cmFuc2FjdGlvbi4KKyAqCisgKiAzKSBEZWFkbG9jayB3aGVuIHRoZSBzaG1fbXEg YnVmZmVyIGlzIGZ1bGwKKyAqCisgKiBJbiB0aGUgcHJldmlvdXMgc2NlbmFyaW8gKGllLiBQQS0x IGFuZCBQQS0yIGFyZSBleGVjdXRpbmcgdHJhbnNhY3Rpb25zCisgKiBjb25jdXJyZW50bHkpLCBp ZiB0aGUgc2htX21xIGJ1ZmZlciBiZXR3ZWVuIExBIGFuZCBQQS0yIGlzIGZ1bGwsIExBIGhhcyB0 bworICogd2FpdCB0byBzZW5kIG1lc3NhZ2VzLCBhbmQgdGhpcyB3YWl0IGRvZXNuJ3QgYXBwZWFy IGluIGxtZ3IuCisgKgorICogVG8gYXZvaWQgdGhpcyB3YWl0LCB3ZSB1c2UgYSBub24tYmxvY2tp bmcgd3JpdGUgYW5kIHdhaXQgd2l0aCBhIHRpbWVvdXQuIElmCisgKiB0aGUgdGltZW91dCBpcyBl eGNlZWRlZCwgdGhlIExBIHdpbGwgc2VyaWFsaXplIGFsbCB0aGUgcGVuZGluZyBtZXNzYWdlcyB0 bworICogYSBmaWxlIGFuZCBpbmRpY2F0ZSBQQS0yIHRoYXQgaXQgbmVlZHMgdG8gcmVhZCB0aGF0 IGZpbGUgZm9yIHRoZSByZW1haW5pbmcKKyAqIG1lc3NhZ2VzLiBUaGVuIExBIHdpbGwgc3RhcnQg d2FpdGluZyBmb3IgY29tbWl0IGFzIGluIHRoZSBwcmV2aW91cyBjYXNlCisgKiB3aGljaCB3aWxs IGRldGVjdCBkZWFkbG9jayBpZiBhbnkuIFNlZSBwYV9zZW5kX2RhdGEoKSBhbmQKKyAqIGVudW0g VHJhbnNBcHBseUFjdGlvbi4KKyAqCisgKiBMb2NrIHR5cGVzCisgKiAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgKiBCb3RoIHRoZSBzdHJlYW0gbG9jayBhbmQgdGhlIHRyYW5zYWN0aW9uIGxvY2sg bWVudGlvbmVkIGFib3ZlIGFyZQorICogc2Vzc2lvbi1sZXZlbCBsb2NrcyBiZWNhdXNlIGJvdGgg bG9ja3MgY291bGQgYmUgYWNxdWlyZWQgb3V0c2lkZSB0aGUKKyAqIHRyYW5zYWN0aW9uLCBhbmQg dGhlIHN0cmVhbSBsb2NrIGluIHRoZSBsZWFkZXIgbmVlZHMgdG8gcGVyc2lzdCBhY3Jvc3MKKyAq IHRyYW5zYWN0aW9uIGJvdW5kYXJpZXMgaS5lLiB1bnRpbCB0aGUgZW5kIG9mIHRoZSBzdHJlYW1p bmcgdHJhbnNhY3Rpb24uCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjaW5jbHVkZSAicG9z dGdyZXMuaCIKKworI2luY2x1ZGUgImxpYnBxL3BxZm9ybWF0LmgiCisjaW5jbHVkZSAibGlicHEv cHFtcS5oIgorI2luY2x1ZGUgInBnc3RhdC5oIgorI2luY2x1ZGUgInBvc3RtYXN0ZXIvaW50ZXJy dXB0LmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vbG9naWNhbGxhdW5jaGVyLmgiCisjaW5jbHVk ZSAicmVwbGljYXRpb24vbG9naWNhbHdvcmtlci5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9uL29y aWdpbi5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9uL3dvcmtlcl9pbnRlcm5hbC5oIgorI2luY2x1 ZGUgInN0b3JhZ2UvaXBjLmgiCisjaW5jbHVkZSAic3RvcmFnZS9sbWdyLmgiCisjaW5jbHVkZSAi dGNvcC90Y29wcHJvdC5oIgorI2luY2x1ZGUgInV0aWxzL2ludmFsLmgiCisjaW5jbHVkZSAidXRp bHMvbWVtdXRpbHMuaCIKKyNpbmNsdWRlICJ1dGlscy9zeXNjYWNoZS5oIgorCisjZGVmaW5lIFBH X0xPR0lDQUxfQVBQTFlfU0hNX01BR0lDIDB4Nzg3Y2EwNjcKKworLyoKKyAqIERTTSBrZXlzIGZv ciBwYXJhbGxlbCBhcHBseSB3b3JrZXIuIFVubGlrZSBvdGhlciBwYXJhbGxlbCBleGVjdXRpb24g Y29kZSwKKyAqIHNpbmNlIHdlIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgRFNNIGtleXMgY29u ZmxpY3Rpbmcgd2l0aCBwbGFuX25vZGVfaWQgd2UKKyAqIGNhbiB1c2Ugc21hbGwgaW50ZWdlcnMu CisgKi8KKyNkZWZpbmUgUEFSQUxMRUxfQVBQTFlfS0VZX1NIQVJFRAkJMQorI2RlZmluZSBQQVJB TExFTF9BUFBMWV9LRVlfTVEJCQkyCisjZGVmaW5lIFBBUkFMTEVMX0FQUExZX0tFWV9FUlJPUl9R VUVVRQkzCisKKy8qIFF1ZXVlIHNpemUgb2YgRFNNLCAxNiBNQiBmb3Igbm93LiAqLworI2RlZmlu ZSBEU01fUVVFVUVfU0laRQkoMTYgKiAxMDI0ICogMTAyNCkKKworLyoKKyAqIEVycm9yIHF1ZXVl IHNpemUgb2YgRFNNLiBJdCBpcyBkZXNpcmFibGUgdG8gbWFrZSBpdCBsYXJnZSBlbm91Z2ggdGhh dCBhCisgKiB0eXBpY2FsIEVycm9yUmVzcG9uc2UgY2FuIGJlIHNlbnQgd2l0aG91dCBibG9ja2lu Zy4gVGhhdCB3YXksIGEgd29ya2VyIHRoYXQKKyAqIGVycm9ycyBvdXQgY2FuIHdyaXRlIHRoZSB3 aG9sZSBtZXNzYWdlIGludG8gdGhlIHF1ZXVlIGFuZCB0ZXJtaW5hdGUgd2l0aG91dAorICogd2Fp dGluZyBmb3IgdGhlIHVzZXIgYmFja2VuZC4KKyAqLworI2RlZmluZSBEU01fRVJST1JfUVVFVUVf U0laRQkJCSgxNiAqIDEwMjQpCisKKy8qCisgKiBUaGVyZSBhcmUgdGhyZWUgZmllbGRzIGluIGVh Y2ggbWVzc2FnZSByZWNlaXZlZCBieSB0aGUgcGFyYWxsZWwgYXBwbHkKKyAqIHdvcmtlcjogc3Rh cnRfbHNuLCBlbmRfbHNuIGFuZCBzZW5kX3RpbWUuIEJlY2F1c2Ugd2UgaGF2ZSB1cGRhdGVkIHRo ZXNlCisgKiBzdGF0aXN0aWNzIGluIHRoZSBsZWFkZXIgYXBwbHkgd29ya2VyLCB3ZSBjYW4gaWdu b3JlIHRoZXNlIGZpZWxkcyBpbiB0aGUKKyAqIHBhcmFsbGVsIGFwcGx5IHdvcmtlciAoc2VlIGZ1 bmN0aW9uIExvZ2ljYWxSZXBBcHBseUxvb3ApLgorICovCisjZGVmaW5lIFNJWkVfU1RBVFNfTUVT U0FHRSAoMiAqIHNpemVvZihYTG9nUmVjUHRyKSArIHNpemVvZihUaW1lc3RhbXBUeikpCisKKy8q CisgKiBUaGUgdHlwZSBvZiBzZXNzaW9uLWxldmVsIGxvY2sgb24gYSB0cmFuc2FjdGlvbiBiZWlu ZyBhcHBsaWVkIG9uIGEgbG9naWNhbAorICogcmVwbGljYXRpb24gc3Vic2NyaWJlci4KKyAqLwor I2RlZmluZSBQQVJBTExFTF9BUFBMWV9MT0NLX1NUUkVBTQkwCisjZGVmaW5lIFBBUkFMTEVMX0FQ UExZX0xPQ0tfWEFDVAkxCisKKy8qCisgKiBIYXNoIHRhYmxlIGVudHJ5IHRvIG1hcCB4aWQgdG8g dGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlciBzdGF0ZS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgUGFy YWxsZWxBcHBseVdvcmtlckVudHJ5Cit7CisJVHJhbnNhY3Rpb25JZCB4aWQ7CQkJLyogSGFzaCBr ZXkgLS0gbXVzdCBiZSBmaXJzdCAqLworCVBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICp3aW5mbzsK K30gUGFyYWxsZWxBcHBseVdvcmtlckVudHJ5OworCisvKgorICogQSBoYXNoIHRhYmxlIHVzZWQg dG8gY2FjaGUgdGhlIHN0YXRlIG9mIHN0cmVhbWluZyB0cmFuc2FjdGlvbnMgYmVpbmcgYXBwbGll ZAorICogYnkgdGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlcnMuCisgKi8KK3N0YXRpYyBIVEFCICpQ YXJhbGxlbEFwcGx5VHhuSGFzaCA9IE5VTEw7CisKKy8qCisqIEEgbGlzdCAocG9vbCkgb2YgYWN0 aXZlIHBhcmFsbGVsIGFwcGx5IHdvcmtlcnMuIFRoZSBpbmZvcm1hdGlvbiBmb3IKKyogdGhlIG5l dyB3b3JrZXIgaXMgYWRkZWQgdG8gdGhlIGxpc3QgYWZ0ZXIgc3VjY2Vzc2Z1bGx5IGxhdW5jaGlu ZyBpdC4gVGhlCisqIGxpc3QgZW50cnkgaXMgcmVtb3ZlZCBpZiB0aGVyZSBhcmUgYWxyZWFkeSBl bm91Z2ggd29ya2VycyBpbiB0aGUgd29ya2VyCisqIHBvb2wgYXQgdGhlIGVuZCBvZiB0aGUgdHJh bnNhY3Rpb24uIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSB3b3JrZXIKKyogcG9vbCwg c2VlIGNvbW1lbnRzIGF0b3AgdGhpcyBmaWxlLgorICovCitzdGF0aWMgTGlzdCAqUGFyYWxsZWxB cHBseVdvcmtlclBvb2wgPSBOSUw7CisKKy8qCisgKiBJbmZvcm1hdGlvbiBzaGFyZWQgYmV0d2Vl biBsZWFkZXIgYXBwbHkgd29ya2VyIGFuZCBwYXJhbGxlbCBhcHBseSB3b3JrZXIuCisgKi8KK1Bh cmFsbGVsQXBwbHlXb3JrZXJTaGFyZWQgKk15UGFyYWxsZWxTaGFyZWQgPSBOVUxMOworCisvKgor ICogSXMgdGhlcmUgYSBtZXNzYWdlIHNlbnQgYnkgYSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgdGhh dCB0aGUgbGVhZGVyIGFwcGx5CisgKiB3b3JrZXIgbmVlZHMgdG8gcmVjZWl2ZT8KKyAqLwordm9s YXRpbGUgc2lnX2F0b21pY190IFBhcmFsbGVsQXBwbHlNZXNzYWdlUGVuZGluZyA9IGZhbHNlOwor CisvKgorICogQ2FjaGUgdGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlciBpbmZvcm1hdGlvbiByZXF1 aXJlZCBmb3IgYXBwbHlpbmcgdGhlCisgKiBjdXJyZW50IHN0cmVhbWluZyB0cmFuc2FjdGlvbi4g SXQgaXMgdXNlZCB0byBzYXZlIHRoZSBjb3N0IG9mIHNlYXJjaGluZyB0aGUKKyAqIGhhc2ggdGFi bGUgd2hlbiBhcHBseWluZyB0aGUgY2hhbmdlcyBiZXR3ZWVuIFNUUkVBTV9TVEFSVCBhbmQgU1RS RUFNX1NUT1AuCisgKi8KK3N0YXRpYyBQYXJhbGxlbEFwcGx5V29ya2VySW5mbyAqc3RyZWFtX2Fw cGx5X3dvcmtlciA9IE5VTEw7CisKKy8qIEEgbGlzdCB0byBtYWludGFpbiBzdWJ0cmFuc2FjdGlv bnMsIGlmIGFueS4gKi8KK3N0YXRpYyBMaXN0ICpzdWJ4YWN0bGlzdCA9IE5JTDsKKworc3RhdGlj IHZvaWQgcGFfZnJlZV93b3JrZXJfaW5mbyhQYXJhbGxlbEFwcGx5V29ya2VySW5mbyAqd2luZm8p Oworc3RhdGljIFBhcmFsbGVsVHJhbnNTdGF0ZSBwYV9nZXRfeGFjdF9zdGF0ZShQYXJhbGxlbEFw cGx5V29ya2VyU2hhcmVkICp3c2hhcmVkKTsKK3N0YXRpYyBQYXJ0aWFsRmlsZVNldFN0YXRlIHBh X2dldF9maWxlc2V0X3N0YXRlKHZvaWQpOworCisvKgorICogUmV0dXJucyB0cnVlIGlmIGl0IGlz IE9LIHRvIHN0YXJ0IGEgcGFyYWxsZWwgYXBwbHkgd29ya2VyLCBmYWxzZSBvdGhlcndpc2UuCisg Ki8KK3N0YXRpYyBib29sCitwYV9jYW5fc3RhcnQodm9pZCkKK3sKKwkvKiBPbmx5IGxlYWRlciBh cHBseSB3b3JrZXJzIGNhbiBzdGFydCBwYXJhbGxlbCBhcHBseSB3b3JrZXJzLiAqLworCWlmICgh YW1fbGVhZGVyX2FwcGx5X3dvcmtlcigpKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKgorCSAqIEl0 IGlzIGdvb2QgdG8gY2hlY2sgZm9yIGFueSBjaGFuZ2UgaW4gdGhlIHN1YnNjcmlwdGlvbiBwYXJh bWV0ZXIgdG8KKwkgKiBhdm9pZCB0aGUgY2FzZSB3aGVyZSBmb3IgYSB2ZXJ5IGxvbmcgdGltZSB0 aGUgY2hhbmdlIGRvZXNuJ3QgZ2V0CisJICogcmVmbGVjdGVkLiBUaGlzIGNhbiBoYXBwZW4gd2hl biB0aGVyZSBpcyBhIGNvbnN0YW50IGZsb3cgb2Ygc3RyZWFtaW5nCisJICogdHJhbnNhY3Rpb25z IHRoYXQgYXJlIGhhbmRsZWQgYnkgcGFyYWxsZWwgYXBwbHkgd29ya2Vycy4KKwkgKgorCSAqIEl0 IGlzIGJldHRlciB0byBkbyBpdCBiZWZvcmUgdGhlIGJlbG93IGNoZWNrcyBzbyB0aGF0IHRoZSBs YXRlc3QgdmFsdWVzCisJICogb2Ygc3Vic2NyaXB0aW9uIGNhbiBiZSB1c2VkIGZvciB0aGUgY2hl Y2tzLgorCSAqLworCW1heWJlX3JlcmVhZF9zdWJzY3JpcHRpb24oKTsKKworCS8qCisJICogRG9u J3Qgc3RhcnQgYSBuZXcgcGFyYWxsZWwgYXBwbHkgd29ya2VyIGlmIHRoZSBzdWJzY3JpcHRpb24g aXMgbm90CisJICogdXNpbmcgcGFyYWxsZWwgc3RyZWFtaW5nIG1vZGUsIG9yIGlmIHRoZSBwdWJs aXNoZXIgZG9lcyBub3Qgc3VwcG9ydAorCSAqIHBhcmFsbGVsIGFwcGx5LgorCSAqLworCWlmICgh TXlMb2dpY2FsUmVwV29ya2VyLT5wYXJhbGxlbF9hcHBseSkKKwkJcmV0dXJuIGZhbHNlOworCisJ LyoKKwkgKiBEb24ndCBzdGFydCBhIG5ldyBwYXJhbGxlbCB3b3JrZXIgaWYgdXNlciBoYXMgc2V0 IHNraXBsc24gYXMgaXQncworCSAqIHBvc3NpYmxlIHRoYXQgdGhleSB3YW50IHRvIHNraXAgdGhl IHN0cmVhbWluZyB0cmFuc2FjdGlvbi4gRm9yCisJICogc3RyZWFtaW5nIHRyYW5zYWN0aW9ucywg d2UgbmVlZCB0byBzZXJpYWxpemUgdGhlIHRyYW5zYWN0aW9uIHRvIGEgZmlsZQorCSAqIHNvIHRo YXQgd2UgY2FuIGdldCB0aGUgbGFzdCBMU04gb2YgdGhlIHRyYW5zYWN0aW9uIHRvIGp1ZGdlIHdo ZXRoZXIgdG8KKwkgKiBza2lwIGJlZm9yZSBzdGFydGluZyB0byBhcHBseSB0aGUgY2hhbmdlLgor CSAqLworCWlmICghWExvZ1JlY1B0cklzSW52YWxpZChNeVN1YnNjcmlwdGlvbi0+c2tpcGxzbikp CisJCXJldHVybiBmYWxzZTsKKworCS8qCisJICogRm9yIHN0cmVhbWluZyB0cmFuc2FjdGlvbnMg dGhhdCBhcmUgYmVpbmcgYXBwbGllZCB1c2luZyBhIHBhcmFsbGVsCisJICogYXBwbHkgd29ya2Vy LCB3ZSBjYW5ub3QgZGVjaWRlIHdoZXRoZXIgdG8gYXBwbHkgdGhlIGNoYW5nZSBmb3IgYQorCSAq IHJlbGF0aW9uIHRoYXQgaXMgbm90IGluIHRoZSBSRUFEWSBzdGF0ZSAoc2VlCisJICogc2hvdWxk X2FwcGx5X2NoYW5nZXNfZm9yX3JlbCkgYXMgd2Ugd29uJ3Qga25vdyByZW1vdGVfZmluYWxfbHNu IGJ5IHRoYXQKKwkgKiB0aW1lLiBTbywgd2UgZG9uJ3Qgc3RhcnQgdGhlIG5ldyBwYXJhbGxlbCBh cHBseSB3b3JrZXIgaW4gdGhpcyBjYXNlLgorCSAqLworCWlmICghQWxsVGFibGVzeW5jc1JlYWR5 KCkpCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiB0cnVlOworfQorCisvKgorICogU2V0IHVw IGEgZHluYW1pYyBzaGFyZWQgbWVtb3J5IHNlZ21lbnQuCisgKgorICogV2Ugc2V0IHVwIGEgY29u dHJvbCByZWdpb24gdGhhdCBjb250YWlucyBhIGZpeGVkLXNpemUgd29ya2VyIGluZm8KKyAqIChQ YXJhbGxlbEFwcGx5V29ya2VyU2hhcmVkKSwgYSBtZXNzYWdlIHF1ZXVlLCBhbmQgYW4gZXJyb3Ig cXVldWUuCisgKgorICogUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MsIGZhbHNlIG9uIGZhaWx1cmUu CisgKi8KK3N0YXRpYyBib29sCitwYV9zZXR1cF9kc20oUGFyYWxsZWxBcHBseVdvcmtlckluZm8g KndpbmZvKQoreworCXNobV90b2NfZXN0aW1hdG9yIGU7CisJU2l6ZQkJc2Vnc2l6ZTsKKwlkc21f c2VnbWVudCAqc2VnOworCXNobV90b2MgICAgKnRvYzsKKwlQYXJhbGxlbEFwcGx5V29ya2VyU2hh cmVkICpzaGFyZWQ7CisJc2htX21xCSAgICptcTsKKwlTaXplCQlxdWV1ZV9zaXplID0gRFNNX1FV RVVFX1NJWkU7CisJU2l6ZQkJZXJyb3JfcXVldWVfc2l6ZSA9IERTTV9FUlJPUl9RVUVVRV9TSVpF OworCisJLyoKKwkgKiBFc3RpbWF0ZSBob3cgbXVjaCBzaGFyZWQgbWVtb3J5IHdlIG5lZWQuCisJ ICoKKwkgKiBCZWNhdXNlIHRoZSBUT0MgbWFjaGluZXJ5IG1heSBjaG9vc2UgdG8gaW5zZXJ0IHBh ZGRpbmcgb2Ygb2RkbHktc2l6ZWQKKwkgKiByZXF1ZXN0cywgd2UgbXVzdCBlc3RpbWF0ZSBlYWNo IGNodW5rIHNlcGFyYXRlbHkuCisJICoKKwkgKiBXZSBuZWVkIG9uZSBrZXkgdG8gcmVnaXN0ZXIg dGhlIGxvY2F0aW9uIG9mIHRoZSBoZWFkZXIsIGFuZCB0d28gb3RoZXIKKwkgKiBrZXlzIHRvIHRy YWNrIHRoZSBsb2NhdGlvbnMgb2YgdGhlIG1lc3NhZ2UgcXVldWUgYW5kIHRoZSBlcnJvciBtZXNz YWdlCisJICogcXVldWUuCisJICovCisJc2htX3RvY19pbml0aWFsaXplX2VzdGltYXRvcigmZSk7 CisJc2htX3RvY19lc3RpbWF0ZV9jaHVuaygmZSwgc2l6ZW9mKFBhcmFsbGVsQXBwbHlXb3JrZXJT aGFyZWQpKTsKKwlzaG1fdG9jX2VzdGltYXRlX2NodW5rKCZlLCBxdWV1ZV9zaXplKTsKKwlzaG1f dG9jX2VzdGltYXRlX2NodW5rKCZlLCBlcnJvcl9xdWV1ZV9zaXplKTsKKworCXNobV90b2NfZXN0 aW1hdGVfa2V5cygmZSwgMyk7CisJc2Vnc2l6ZSA9IHNobV90b2NfZXN0aW1hdGUoJmUpOworCisJ LyogQ3JlYXRlIHRoZSBzaGFyZWQgbWVtb3J5IHNlZ21lbnQgYW5kIGVzdGFibGlzaCBhIHRhYmxl IG9mIGNvbnRlbnRzLiAqLworCXNlZyA9IGRzbV9jcmVhdGUoc2htX3RvY19lc3RpbWF0ZSgmZSks IDApOworCWlmICghc2VnKQorCQlyZXR1cm4gZmFsc2U7CisKKwl0b2MgPSBzaG1fdG9jX2NyZWF0 ZShQR19MT0dJQ0FMX0FQUExZX1NITV9NQUdJQywgZHNtX3NlZ21lbnRfYWRkcmVzcyhzZWcpLAor CQkJCQkJIHNlZ3NpemUpOworCisJLyogU2V0IHVwIHRoZSBoZWFkZXIgcmVnaW9uLiAqLworCXNo YXJlZCA9IHNobV90b2NfYWxsb2NhdGUodG9jLCBzaXplb2YoUGFyYWxsZWxBcHBseVdvcmtlclNo YXJlZCkpOworCVNwaW5Mb2NrSW5pdCgmc2hhcmVkLT5tdXRleCk7CisKKwlzaGFyZWQtPnhhY3Rf c3RhdGUgPSBQQVJBTExFTF9UUkFOU19VTktOT1dOOworCXBnX2F0b21pY19pbml0X3UzMigmKHNo YXJlZC0+cGVuZGluZ19zdHJlYW1fY291bnQpLCAwKTsKKwlzaGFyZWQtPmxhc3RfY29tbWl0X2Vu ZCA9IEludmFsaWRYTG9nUmVjUHRyOworCXNoYXJlZC0+ZmlsZXNldF9zdGF0ZSA9IEZTX0VNUFRZ OworCisJc2htX3RvY19pbnNlcnQodG9jLCBQQVJBTExFTF9BUFBMWV9LRVlfU0hBUkVELCBzaGFy ZWQpOworCisJLyogU2V0IHVwIG1lc3NhZ2UgcXVldWUgZm9yIHRoZSB3b3JrZXIuICovCisJbXEg PSBzaG1fbXFfY3JlYXRlKHNobV90b2NfYWxsb2NhdGUodG9jLCBxdWV1ZV9zaXplKSwgcXVldWVf c2l6ZSk7CisJc2htX3RvY19pbnNlcnQodG9jLCBQQVJBTExFTF9BUFBMWV9LRVlfTVEsIG1xKTsK KwlzaG1fbXFfc2V0X3NlbmRlcihtcSwgTXlQcm9jKTsKKworCS8qIEF0dGFjaCB0aGUgcXVldWUu ICovCisJd2luZm8tPm1xX2hhbmRsZSA9IHNobV9tcV9hdHRhY2gobXEsIHNlZywgTlVMTCk7CisK KwkvKiBTZXQgdXAgZXJyb3IgcXVldWUgZm9yIHRoZSB3b3JrZXIuICovCisJbXEgPSBzaG1fbXFf Y3JlYXRlKHNobV90b2NfYWxsb2NhdGUodG9jLCBlcnJvcl9xdWV1ZV9zaXplKSwKKwkJCQkJICAg ZXJyb3JfcXVldWVfc2l6ZSk7CisJc2htX3RvY19pbnNlcnQodG9jLCBQQVJBTExFTF9BUFBMWV9L RVlfRVJST1JfUVVFVUUsIG1xKTsKKwlzaG1fbXFfc2V0X3JlY2VpdmVyKG1xLCBNeVByb2MpOwor CisJLyogQXR0YWNoIHRoZSBxdWV1ZS4gKi8KKwl3aW5mby0+ZXJyb3JfbXFfaGFuZGxlID0gc2ht X21xX2F0dGFjaChtcSwgc2VnLCBOVUxMKTsKKworCS8qIFJldHVybiByZXN1bHRzIHRvIGNhbGxl ci4gKi8KKwl3aW5mby0+ZHNtX3NlZyA9IHNlZzsKKwl3aW5mby0+c2hhcmVkID0gc2hhcmVkOwor CisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBUcnkgdG8gZ2V0IGEgcGFyYWxsZWwgYXBwbHkg d29ya2VyIGZyb20gdGhlIHBvb2wuIElmIG5vbmUgaXMgYXZhaWxhYmxlIHRoZW4KKyAqIHN0YXJ0 IGEgbmV3IG9uZS4KKyAqLworc3RhdGljIFBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICoKK3BhX2xh dW5jaF9wYXJhbGxlbF93b3JrZXIodm9pZCkKK3sKKwlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7 CisJYm9vbAkJbGF1bmNoZWQ7CisJUGFyYWxsZWxBcHBseVdvcmtlckluZm8gKndpbmZvOworCUxp c3RDZWxsICAgKmxjOworCisJLyogVHJ5IHRvIGdldCBhbiBhdmFpbGFibGUgcGFyYWxsZWwgYXBw bHkgd29ya2VyIGZyb20gdGhlIHdvcmtlciBwb29sLiAqLworCWZvcmVhY2gobGMsIFBhcmFsbGVs QXBwbHlXb3JrZXJQb29sKQorCXsKKwkJd2luZm8gPSAoUGFyYWxsZWxBcHBseVdvcmtlckluZm8g KikgbGZpcnN0KGxjKTsKKworCQlpZiAoIXdpbmZvLT5pbl91c2UpCisJCQlyZXR1cm4gd2luZm87 CisJfQorCisJLyoKKwkgKiBTdGFydCBhIG5ldyBwYXJhbGxlbCBhcHBseSB3b3JrZXIuCisJICoK KwkgKiBUaGUgd29ya2VyIGluZm8gY2FuIGJlIHVzZWQgZm9yIHRoZSBsaWZldGltZSBvZiB0aGUg d29ya2VyIHByb2Nlc3MsIHNvCisJICogY3JlYXRlIGl0IGluIGEgcGVybWFuZW50IGNvbnRleHQu CisJICovCisJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhBcHBseUNvbnRleHQp OworCisJd2luZm8gPSAoUGFyYWxsZWxBcHBseVdvcmtlckluZm8gKikgcGFsbG9jMChzaXplb2Yo UGFyYWxsZWxBcHBseVdvcmtlckluZm8pKTsKKworCS8qIFNldHVwIHNoYXJlZCBtZW1vcnkuICov CisJaWYgKCFwYV9zZXR1cF9kc20od2luZm8pKQorCXsKKwkJTWVtb3J5Q29udGV4dFN3aXRjaFRv KG9sZGNvbnRleHQpOworCQlwZnJlZSh3aW5mbyk7CisJCXJldHVybiBOVUxMOworCX0KKworCWxh dW5jaGVkID0gbG9naWNhbHJlcF93b3JrZXJfbGF1bmNoKE15TG9naWNhbFJlcFdvcmtlci0+ZGJp ZCwKKwkJCQkJCQkJCQlNeVN1YnNjcmlwdGlvbi0+b2lkLAorCQkJCQkJCQkJCU15U3Vic2NyaXB0 aW9uLT5uYW1lLAorCQkJCQkJCQkJCU15TG9naWNhbFJlcFdvcmtlci0+dXNlcmlkLAorCQkJCQkJ CQkJCUludmFsaWRPaWQsCisJCQkJCQkJCQkJZHNtX3NlZ21lbnRfaGFuZGxlKHdpbmZvLT5kc21f c2VnKSk7CisKKwlpZiAobGF1bmNoZWQpCisJeworCQlQYXJhbGxlbEFwcGx5V29ya2VyUG9vbCA9 IGxhcHBlbmQoUGFyYWxsZWxBcHBseVdvcmtlclBvb2wsIHdpbmZvKTsKKwl9CisJZWxzZQorCXsK KwkJcGFfZnJlZV93b3JrZXJfaW5mbyh3aW5mbyk7CisJCXdpbmZvID0gTlVMTDsKKwl9CisKKwlN ZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CisKKwlyZXR1cm4gd2luZm87Cit9CisK Ky8qCisgKiBBbGxvY2F0ZSBhIHBhcmFsbGVsIGFwcGx5IHdvcmtlciB0aGF0IHdpbGwgYmUgdXNl ZCBmb3IgdGhlIHNwZWNpZmllZCB4aWQuCisgKgorICogV2UgZmlyc3QgdHJ5IHRvIGdldCBhbiBh dmFpbGFibGUgd29ya2VyIGZyb20gdGhlIHBvb2wsIGlmIGFueSBhbmQgdGhlbiB0cnkKKyAqIHRv IGxhdW5jaCBhIG5ldyB3b3JrZXIuIE9uIHN1Y2Nlc3NmdWwgYWxsb2NhdGlvbiwgcmVtZW1iZXIg dGhlIHdvcmtlcgorICogaW5mb3JtYXRpb24gaW4gdGhlIGhhc2ggdGFibGUgc28gdGhhdCB3ZSBj YW4gZ2V0IGl0IGxhdGVyIGZvciBwcm9jZXNzaW5nIHRoZQorICogc3RyZWFtaW5nIGNoYW5nZXMu CisgKi8KK3ZvaWQKK3BhX2FsbG9jYXRlX3dvcmtlcihUcmFuc2FjdGlvbklkIHhpZCkKK3sKKwli b29sCQlmb3VuZDsKKwlQYXJhbGxlbEFwcGx5V29ya2VySW5mbyAqd2luZm8gPSBOVUxMOworCVBh cmFsbGVsQXBwbHlXb3JrZXJFbnRyeSAqZW50cnk7CisKKwlpZiAoIXBhX2Nhbl9zdGFydCgpKQor CQlyZXR1cm47CisKKwkvKiBGaXJzdCB0aW1lIHRocm91Z2gsIGluaXRpYWxpemUgcGFyYWxsZWwg YXBwbHkgd29ya2VyIHN0YXRlIGhhc2h0YWJsZS4gKi8KKwlpZiAoIVBhcmFsbGVsQXBwbHlUeG5I YXNoKQorCXsKKwkJSEFTSENUTAkJY3RsOworCisJCU1lbVNldCgmY3RsLCAwLCBzaXplb2YoY3Rs KSk7CisJCWN0bC5rZXlzaXplID0gc2l6ZW9mKFRyYW5zYWN0aW9uSWQpOworCQljdGwuZW50cnlz aXplID0gc2l6ZW9mKFBhcmFsbGVsQXBwbHlXb3JrZXJFbnRyeSk7CisJCWN0bC5oY3h0ID0gQXBw bHlDb250ZXh0OworCisJCVBhcmFsbGVsQXBwbHlUeG5IYXNoID0gaGFzaF9jcmVhdGUoImxvZ2lj YWwgcmVwbGljYXRpb24gcGFyYWxsZWwgYXBwbHkgd29ya2VycyBoYXNoIiwKKwkJCQkJCQkJCQkg ICAxNiwgJmN0bCwKKwkJCQkJCQkJCQkgICBIQVNIX0VMRU0gfCBIQVNIX0JMT0JTIHwgSEFTSF9D T05URVhUKTsKKwl9CisKKwl3aW5mbyA9IHBhX2xhdW5jaF9wYXJhbGxlbF93b3JrZXIoKTsKKwlp ZiAoIXdpbmZvKQorCQlyZXR1cm47CisKKwkvKiBDcmVhdGUgYW4gZW50cnkgZm9yIHRoZSByZXF1 ZXN0ZWQgdHJhbnNhY3Rpb24uICovCisJZW50cnkgPSBoYXNoX3NlYXJjaChQYXJhbGxlbEFwcGx5 VHhuSGFzaCwgJnhpZCwgSEFTSF9FTlRFUiwgJmZvdW5kKTsKKwlpZiAoZm91bmQpCisJCWVsb2co RVJST1IsICJoYXNoIHRhYmxlIGNvcnJ1cHRlZCIpOworCisJLyogVXBkYXRlIHRoZSB0cmFuc2Fj dGlvbiBpbmZvcm1hdGlvbiBpbiBzaGFyZWQgbWVtb3J5LiAqLworCVNwaW5Mb2NrQWNxdWlyZSgm d2luZm8tPnNoYXJlZC0+bXV0ZXgpOworCXdpbmZvLT5zaGFyZWQtPnhhY3Rfc3RhdGUgPSBQQVJB TExFTF9UUkFOU19VTktOT1dOOworCXdpbmZvLT5zaGFyZWQtPnhpZCA9IHhpZDsKKwlTcGluTG9j a1JlbGVhc2UoJndpbmZvLT5zaGFyZWQtPm11dGV4KTsKKworCXdpbmZvLT5pbl91c2UgPSB0cnVl OworCXdpbmZvLT5zZXJpYWxpemVfY2hhbmdlcyA9IGZhbHNlOworCWVudHJ5LT53aW5mbyA9IHdp bmZvOworCWVudHJ5LT54aWQgPSB4aWQ7Cit9CisKKy8qCisgKiBGaW5kIHRoZSBhc3NpZ25lZCB3 b3JrZXIgZm9yIHRoZSBnaXZlbiB0cmFuc2FjdGlvbiwgaWYgYW55LgorICovCitQYXJhbGxlbEFw cGx5V29ya2VySW5mbyAqCitwYV9maW5kX3dvcmtlcihUcmFuc2FjdGlvbklkIHhpZCkKK3sKKwli b29sCQlmb3VuZDsKKwlQYXJhbGxlbEFwcGx5V29ya2VyRW50cnkgKmVudHJ5OworCisJaWYgKCFU cmFuc2FjdGlvbklkSXNWYWxpZCh4aWQpKQorCQlyZXR1cm4gTlVMTDsKKworCWlmICghUGFyYWxs ZWxBcHBseVR4bkhhc2gpCisJCXJldHVybiBOVUxMOworCisJLyogUmV0dXJuIHRoZSBjYWNoZWQg cGFyYWxsZWwgYXBwbHkgd29ya2VyIGlmIHZhbGlkLiAqLworCWlmIChzdHJlYW1fYXBwbHlfd29y a2VyKQorCQlyZXR1cm4gc3RyZWFtX2FwcGx5X3dvcmtlcjsKKworCS8qIEZpbmQgYW4gZW50cnkg Zm9yIHRoZSByZXF1ZXN0ZWQgdHJhbnNhY3Rpb24uICovCisJZW50cnkgPSBoYXNoX3NlYXJjaChQ YXJhbGxlbEFwcGx5VHhuSGFzaCwgJnhpZCwgSEFTSF9GSU5ELCAmZm91bmQpOworCWlmIChmb3Vu ZCkKKwl7CisJCS8qIFRoZSB3b3JrZXIgbXVzdCBub3QgaGF2ZSBleGl0ZWQuICAqLworCQlBc3Nl cnQoZW50cnktPndpbmZvLT5pbl91c2UpOworCQlyZXR1cm4gZW50cnktPndpbmZvOworCX0KKwor CXJldHVybiBOVUxMOworfQorCisvKgorICogTWFrZXMgdGhlIHdvcmtlciBhdmFpbGFibGUgZm9y IHJldXNlLgorICoKKyAqIFRoaXMgcmVtb3ZlcyB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyIGVu dHJ5IGZyb20gdGhlIGhhc2ggdGFibGUgc28gdGhhdCBpdAorICogY2FuJ3QgYmUgdXNlZC4gSWYg dGhlcmUgYXJlIGVub3VnaCB3b3JrZXJzIGluIHRoZSBwb29sLCBpdCBzdG9wcyB0aGUgd29ya2Vy CisgKiBhbmQgZnJlZXMgdGhlIGNvcnJlc3BvbmRpbmcgaW5mby4gT3RoZXJ3aXNlIGl0IGp1c3Qg bWFya3MgdGhlIHdvcmtlciBhcworICogYXZhaWxhYmxlIGZvciByZXVzZS4KKyAqCisgKiBGb3Ig bW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgd29ya2VyIHBvb2wsIHNlZSBjb21tZW50cyBhdG9w IHRoaXMgZmlsZS4KKyAqLworc3RhdGljIHZvaWQKK3BhX2ZyZWVfd29ya2VyKFBhcmFsbGVsQXBw bHlXb3JrZXJJbmZvICp3aW5mbykKK3sKKwlBc3NlcnQoIWFtX3BhcmFsbGVsX2FwcGx5X3dvcmtl cigpKTsKKwlBc3NlcnQod2luZm8tPmluX3VzZSk7CisJQXNzZXJ0KHBhX2dldF94YWN0X3N0YXRl KHdpbmZvLT5zaGFyZWQpID09IFBBUkFMTEVMX1RSQU5TX0ZJTklTSEVEKTsKKworCWlmICghaGFz aF9zZWFyY2goUGFyYWxsZWxBcHBseVR4bkhhc2gsICZ3aW5mby0+c2hhcmVkLT54aWQsIEhBU0hf UkVNT1ZFLCBOVUxMKSkKKwkJZWxvZyhFUlJPUiwgImhhc2ggdGFibGUgY29ycnVwdGVkIik7CisK KwkvKgorCSAqIFN0b3AgdGhlIHdvcmtlciBpZiB0aGVyZSBhcmUgZW5vdWdoIHdvcmtlcnMgaW4g dGhlIHBvb2wuCisJICoKKwkgKiBYWFggQWRkaXRpb25hbGx5LCB3ZSBhbHNvIHN0b3AgdGhlIHdv cmtlciBpZiB0aGUgbGVhZGVyIGFwcGx5IHdvcmtlcgorCSAqIHNlcmlhbGl6ZSBwYXJ0IG9mIHRo ZSB0cmFuc2FjdGlvbiBkYXRhIGR1ZSB0byBhIHNlbmQgdGltZW91dC4gVGhpcyBpcworCSAqIGJl Y2F1c2UgdGhlIG1lc3NhZ2UgY291bGQgYmUgcGFydGlhbGx5IHdyaXR0ZW4gdG8gdGhlIHF1ZXVl IGFuZCB0aGVyZQorCSAqIGlzIG5vIHdheSB0byBjbGVhbiB0aGUgcXVldWUgb3RoZXIgdGhhbiBy ZXNlbmRpbmcgdGhlIG1lc3NhZ2UgdW50aWwgaXQKKwkgKiBzdWNjZWVkcy4gSW5zdGVhZCBvZiB0 cnlpbmcgdG8gc2VuZCB0aGUgZGF0YSB3aGljaCBhbnl3YXkgd291bGQgaGF2ZQorCSAqIGJlZW4g c2VyaWFsaXplZCBhbmQgdGhlbiBsZXR0aW5nIHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgZGVh bCB3aXRoCisJICogdGhlIHNwdXJpb3VzIG1lc3NhZ2UsIHdlIHN0b3AgdGhlIHdvcmtlci4KKwkg Ki8KKwlpZiAod2luZm8tPnNlcmlhbGl6ZV9jaGFuZ2VzIHx8CisJCWxpc3RfbGVuZ3RoKFBhcmFs bGVsQXBwbHlXb3JrZXJQb29sKSA+CisJCShtYXhfcGFyYWxsZWxfYXBwbHlfd29ya2Vyc19wZXJf c3Vic2NyaXB0aW9uIC8gMikpCisJeworCQlpbnQJCQlzbG90X25vOworCQl1aW50MTYJCWdlbmVy YXRpb247CisKKwkJU3BpbkxvY2tBY3F1aXJlKCZ3aW5mby0+c2hhcmVkLT5tdXRleCk7CisJCWdl bmVyYXRpb24gPSB3aW5mby0+c2hhcmVkLT5sb2dpY2FscmVwX3dvcmtlcl9nZW5lcmF0aW9uOwor CQlzbG90X25vID0gd2luZm8tPnNoYXJlZC0+bG9naWNhbHJlcF93b3JrZXJfc2xvdF9ubzsKKwkJ U3BpbkxvY2tSZWxlYXNlKCZ3aW5mby0+c2hhcmVkLT5tdXRleCk7CisKKwkJbG9naWNhbHJlcF9w YV93b3JrZXJfc3RvcChzbG90X25vLCBnZW5lcmF0aW9uKTsKKworCQlwYV9mcmVlX3dvcmtlcl9p bmZvKHdpbmZvKTsKKworCQlyZXR1cm47CisJfQorCisJd2luZm8tPmluX3VzZSA9IGZhbHNlOwor CXdpbmZvLT5zZXJpYWxpemVfY2hhbmdlcyA9IGZhbHNlOworfQorCisvKgorICogRnJlZSB0aGUg cGFyYWxsZWwgYXBwbHkgd29ya2VyIGluZm9ybWF0aW9uIGFuZCB1bmxpbmsgdGhlIGZpbGVzIHdp dGgKKyAqIHNlcmlhbGl6ZWQgY2hhbmdlcyBpZiBhbnkuCisgKi8KK3N0YXRpYyB2b2lkCitwYV9m cmVlX3dvcmtlcl9pbmZvKFBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICp3aW5mbykKK3sKKwlBc3Nl cnQod2luZm8pOworCisJaWYgKHdpbmZvLT5tcV9oYW5kbGUpCisJCXNobV9tcV9kZXRhY2god2lu Zm8tPm1xX2hhbmRsZSk7CisKKwlpZiAod2luZm8tPmVycm9yX21xX2hhbmRsZSkKKwkJc2htX21x X2RldGFjaCh3aW5mby0+ZXJyb3JfbXFfaGFuZGxlKTsKKworCS8qIFVubGluayB0aGUgZmlsZXMg d2l0aCBzZXJpYWxpemVkIGNoYW5nZXMuICovCisJaWYgKHdpbmZvLT5zZXJpYWxpemVfY2hhbmdl cykKKwkJc3RyZWFtX2NsZWFudXBfZmlsZXMoTXlMb2dpY2FsUmVwV29ya2VyLT5zdWJpZCwgd2lu Zm8tPnNoYXJlZC0+eGlkKTsKKworCWlmICh3aW5mby0+ZHNtX3NlZykKKwkJZHNtX2RldGFjaCh3 aW5mby0+ZHNtX3NlZyk7CisKKwkvKiBSZW1vdmUgZnJvbSB0aGUgd29ya2VyIHBvb2wuICovCisJ UGFyYWxsZWxBcHBseVdvcmtlclBvb2wgPSBsaXN0X2RlbGV0ZV9wdHIoUGFyYWxsZWxBcHBseVdv cmtlclBvb2wsIHdpbmZvKTsKKworCXBmcmVlKHdpbmZvKTsKK30KKworLyoKKyAqIERldGFjaCB0 aGUgZXJyb3IgcXVldWUgZm9yIGFsbCBwYXJhbGxlbCBhcHBseSB3b3JrZXJzLgorICovCit2b2lk CitwYV9kZXRhY2hfYWxsX2Vycm9yX21xKHZvaWQpCit7CisJTGlzdENlbGwgICAqbGM7CisKKwlm b3JlYWNoKGxjLCBQYXJhbGxlbEFwcGx5V29ya2VyUG9vbCkKKwl7CisJCVBhcmFsbGVsQXBwbHlX b3JrZXJJbmZvICp3aW5mbyA9IChQYXJhbGxlbEFwcGx5V29ya2VySW5mbyAqKSBsZmlyc3QobGMp OworCisJCXNobV9tcV9kZXRhY2god2luZm8tPmVycm9yX21xX2hhbmRsZSk7CisJCXdpbmZvLT5l cnJvcl9tcV9oYW5kbGUgPSBOVUxMOworCX0KK30KKworLyoKKyAqIENoZWNrIGlmIHRoZXJlIGFy ZSBhbnkgcGVuZGluZyBzcG9vbGVkIG1lc3NhZ2VzLgorICovCitzdGF0aWMgYm9vbAorcGFfaGFz X3Nwb29sZWRfbWVzc2FnZV9wZW5kaW5nKCkKK3sKKwlQYXJ0aWFsRmlsZVNldFN0YXRlIGZpbGVz ZXRfc3RhdGU7CisKKwlmaWxlc2V0X3N0YXRlID0gcGFfZ2V0X2ZpbGVzZXRfc3RhdGUoKTsKKwor CXJldHVybiAoZmlsZXNldF9zdGF0ZSAhPSBGU19FTVBUWSk7Cit9CisKKy8qCisgKiBSZXBsYXkg dGhlIHNwb29sZWQgbWVzc2FnZXMgb25jZSB0aGUgbGVhZGVyIGFwcGx5IHdvcmtlciBoYXMgZmlu aXNoZWQKKyAqIHNlcmlhbGl6aW5nIGNoYW5nZXMgdG8gdGhlIGZpbGUuCisgKi8KK3N0YXRpYyB2 b2lkCitwYV9zcG9vbGVkX21lc3NhZ2VzKHZvaWQpCit7CisJUGFydGlhbEZpbGVTZXRTdGF0ZSBm aWxlc2V0X3N0YXRlOworCisJZmlsZXNldF9zdGF0ZSA9IHBhX2dldF9maWxlc2V0X3N0YXRlKCk7 CisKKwkvKgorCSAqIElmIHRoZSBsZWFkZXIgYXBwbHkgd29ya2VyIGlzIGJ1c3kgc2VyaWFsaXpp bmcgdGhlIHBhcnRpYWwgY2hhbmdlcyB0aGVuCisJICogYWNxdWlyZSB0aGUgc3RyZWFtIGxvY2sg bm93IGFuZCB3YWl0IGZvciB0aGUgbGVhZGVyIHdvcmtlciB0byBmaW5pc2gKKwkgKiBzZXJpYWxp emluZyB0aGUgY2hhbmdlcy4gT3RoZXJ3aXNlLCB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyIHdv bid0IGdldAorCSAqIGEgY2hhbmNlIHRvIHJlY2VpdmUgYSBTVFJFQU1fU1RPUCAoYW5kIGFjcXVp cmUgdGhlIHN0cmVhbSBsb2NrKSB1bnRpbAorCSAqIHRoZSBsZWFkZXIgaGFkIHNlcmlhbGl6ZWQg YWxsIGNoYW5nZXMgd2hpY2ggY2FuIGxlYWQgdG8gdW5kZXRlY3RlZAorCSAqIGRlYWRsb2NrLgor CSAqCisJICogTm90ZSB0aGF0IHRoZSBmaWxlc2V0IHN0YXRlIGNhbiBiZSBGU19TRVJJQUxJWkVf RE9ORSBvbmNlIHRoZSBsZWFkZXIKKwkgKiB3b3JrZXIgaGFzIGZpbmlzaGVkIHNlcmlhbGl6aW5n IHRoZSBjaGFuZ2VzLgorCSAqLworCWlmIChmaWxlc2V0X3N0YXRlID09IEZTX1NFUklBTElaRV9J Tl9QUk9HUkVTUykKKwl7CisJCXBhX2xvY2tfc3RyZWFtKE15UGFyYWxsZWxTaGFyZWQtPnhpZCwg QWNjZXNzU2hhcmVMb2NrKTsKKwkJcGFfdW5sb2NrX3N0cmVhbShNeVBhcmFsbGVsU2hhcmVkLT54 aWQsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwkJZmlsZXNldF9zdGF0ZSA9IHBhX2dldF9maWxlc2V0 X3N0YXRlKCk7CisJfQorCisJLyoKKwkgKiBXZSBjYW5ub3QgcmVhZCB0aGUgZmlsZSBpbW1lZGlh dGVseSBhZnRlciB0aGUgbGVhZGVyIGhhcyBzZXJpYWxpemVkIGFsbAorCSAqIGNoYW5nZXMgdG8g dGhlIGZpbGUgYmVjYXVzZSB0aGVyZSBtYXkgc3RpbGwgYmUgbWVzc2FnZXMgaW4gdGhlIG1lbW9y eQorCSAqIHF1ZXVlLiBXZSB3aWxsIGFwcGx5IGFsbCBzcG9vbGVkIG1lc3NhZ2VzIHRoZSBuZXh0 IHRpbWUgd2UgY2FsbCB0aGlzCisJICogZnVuY3Rpb24gYW5kIHRoYXQgd2lsbCBlbnN1cmUgdGhl cmUgYXJlIG5vIG1lc3NhZ2VzIGxlZnQgaW4gdGhlIG1lbW9yeQorCSAqIHF1ZXVlLgorCSAqLwor CWlmIChmaWxlc2V0X3N0YXRlID09IEZTX1NFUklBTElaRV9ET05FKQorCXsKKwkJcGFfc2V0X2Zp bGVzZXRfc3RhdGUoTXlQYXJhbGxlbFNoYXJlZCwgRlNfUkVBRFkpOworCX0KKwllbHNlIGlmIChm aWxlc2V0X3N0YXRlID09IEZTX1JFQURZKQorCXsKKwkJYXBwbHlfc3Bvb2xlZF9tZXNzYWdlcygm TXlQYXJhbGxlbFNoYXJlZC0+ZmlsZXNldCwKKwkJCQkJCQkgICBNeVBhcmFsbGVsU2hhcmVkLT54 aWQsCisJCQkJCQkJICAgSW52YWxpZFhMb2dSZWNQdHIpOworCQlwYV9zZXRfZmlsZXNldF9zdGF0 ZShNeVBhcmFsbGVsU2hhcmVkLCBGU19FTVBUWSk7CisJfQorfQorCisvKgorICogSW50ZXJydXB0 IGhhbmRsZXIgZm9yIG1haW4gbG9vcCBvZiBwYXJhbGxlbCBhcHBseSB3b3JrZXIuCisgKi8KK3N0 YXRpYyB2b2lkCitQcm9jZXNzUGFyYWxsZWxBcHBseUludGVycnVwdHModm9pZCkKK3sKKwlDSEVD S19GT1JfSU5URVJSVVBUUygpOworCisJaWYgKFNodXRkb3duUmVxdWVzdFBlbmRpbmcpCisJewor CQllcmVwb3J0KExPRywKKwkJCQkoZXJybXNnKCJsb2dpY2FsIHJlcGxpY2F0aW9uIHBhcmFsbGVs IGFwcGx5IHdvcmtlciBmb3Igc3Vic2NyaXB0aW9uIFwiJXNcIiBoYXMgZmluaXNoZWQiLAorCQkJ CQkJTXlTdWJzY3JpcHRpb24tPm5hbWUpKSk7CisKKwkJcHJvY19leGl0KDApOworCX0KKworCWlm IChDb25maWdSZWxvYWRQZW5kaW5nKQorCXsKKwkJQ29uZmlnUmVsb2FkUGVuZGluZyA9IGZhbHNl OworCQlQcm9jZXNzQ29uZmlnRmlsZShQR0NfU0lHSFVQKTsKKwl9Cit9CisKKy8qIFBhcmFsbGVs IGFwcGx5IHdvcmtlciBtYWluIGxvb3AuICovCitzdGF0aWMgdm9pZAorTG9naWNhbFBhcmFsbGVs QXBwbHlMb29wKHNobV9tcV9oYW5kbGUgKm1xaCkKK3sKKwlzaG1fbXFfcmVzdWx0IHNobXFfcmVz OworCUVycm9yQ29udGV4dENhbGxiYWNrIGVycmNhbGxiYWNrOworCU1lbW9yeUNvbnRleHQgb2xk Y3h0ID0gQ3VycmVudE1lbW9yeUNvbnRleHQ7CisKKwkvKgorCSAqIEluaXQgdGhlIEFwcGx5TWVz c2FnZUNvbnRleHQgd2hpY2ggd2UgY2xlYW4gdXAgYWZ0ZXIgZWFjaCByZXBsaWNhdGlvbgorCSAq IHByb3RvY29sIG1lc3NhZ2UuCisJICovCisJQXBwbHlNZXNzYWdlQ29udGV4dCA9IEFsbG9jU2V0 Q29udGV4dENyZWF0ZShBcHBseUNvbnRleHQsCisJCQkJCQkJCQkJCQkiQXBwbHlNZXNzYWdlQ29u dGV4dCIsCisJCQkJCQkJCQkJCQlBTExPQ1NFVF9ERUZBVUxUX1NJWkVTKTsKKworCS8qCisJICog UHVzaCBhcHBseSBlcnJvciBjb250ZXh0IGNhbGxiYWNrLiBGaWVsZHMgd2lsbCBiZSBmaWxsZWQg d2hpbGUgYXBwbHlpbmcKKwkgKiBhIGNoYW5nZS4KKwkgKi8KKwllcnJjYWxsYmFjay5jYWxsYmFj ayA9IGFwcGx5X2Vycm9yX2NhbGxiYWNrOworCWVycmNhbGxiYWNrLnByZXZpb3VzID0gZXJyb3Jf Y29udGV4dF9zdGFjazsKKwllcnJvcl9jb250ZXh0X3N0YWNrID0gJmVycmNhbGxiYWNrOworCisJ Zm9yICg7OykKKwl7CisJCXZvaWQJICAgKmRhdGE7CisJCVNpemUJCWxlbjsKKworCQlQcm9jZXNz UGFyYWxsZWxBcHBseUludGVycnVwdHMoKTsKKworCQkvKiBFbnN1cmUgd2UgYXJlIHJlYWRpbmcg dGhlIGRhdGEgaW50byBvdXIgbWVtb3J5IGNvbnRleHQuICovCisJCU1lbW9yeUNvbnRleHRTd2l0 Y2hUbyhBcHBseU1lc3NhZ2VDb250ZXh0KTsKKworCQlzaG1xX3JlcyA9IHNobV9tcV9yZWNlaXZl KG1xaCwgJmxlbiwgJmRhdGEsIHRydWUpOworCisJCWlmIChzaG1xX3JlcyA9PSBTSE1fTVFfU1VD Q0VTUykKKwkJeworCQkJU3RyaW5nSW5mb0RhdGEgczsKKwkJCWludAkJCWM7CisKKwkJCWlmIChs ZW4gPT0gMCkKKwkJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBtZXNzYWdlIGxlbmd0aCIpOworCisJ CQlzLmN1cnNvciA9IDA7CisJCQlzLm1heGxlbiA9IC0xOworCQkJcy5kYXRhID0gKGNoYXIgKikg ZGF0YTsKKwkJCXMubGVuID0gbGVuOworCisJCQkvKgorCQkJICogVGhlIGZpcnN0IGJ5dGUgb2Yg bWVzc2FnZXMgc2VudCBmcm9tIGxlYWRlciBhcHBseSB3b3JrZXIgdG8KKwkJCSAqIHBhcmFsbGVs IGFwcGx5IHdvcmtlcnMgY2FuIG9ubHkgYmUgJ3cnLgorCQkJICovCisJCQljID0gcHFfZ2V0bXNn Ynl0ZSgmcyk7CisJCQlpZiAoYyAhPSAndycpCisJCQkJZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQg bWVzc2FnZSBcIiVjXCIiLCBjKTsKKworCQkJLyoKKwkJCSAqIElnbm9yZSBzdGF0aXN0aWNzIGZp ZWxkcyB0aGF0IGhhdmUgYmVlbiB1cGRhdGVkIGJ5IHRoZSBsZWFkZXIKKwkJCSAqIGFwcGx5IHdv cmtlci4KKwkJCSAqCisJCQkgKiBYWFggV2UgY2FuIGF2b2lkIHNlbmRpbmcgdGhlIHN0YXRpc3Rp Y3MgZmllbGRzIGZyb20gdGhlIGxlYWRlcgorCQkJICogYXBwbHkgd29ya2VyIGJ1dCBmb3IgdGhh dCwgaXQgbmVlZHMgdG8gcmVidWlsZCB0aGUgZW50aXJlCisJCQkgKiBtZXNzYWdlIGJ5IHJlbW92 aW5nIHRoZXNlIGZpZWxkcyB3aGljaCBjb3VsZCBiZSBtb3JlIHdvcmsgdGhhbgorCQkJICogc2lt cGx5IGlnbm9yaW5nIHRoZXNlIGZpZWxkcyBpbiB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyLgor CQkJICovCisJCQlzLmN1cnNvciArPSBTSVpFX1NUQVRTX01FU1NBR0U7CisKKwkJCWFwcGx5X2Rp c3BhdGNoKCZzKTsKKwkJfQorCQllbHNlIGlmIChzaG1xX3JlcyA9PSBTSE1fTVFfV09VTERfQkxP Q0spCisJCXsKKwkJCS8qIFJlcGxheSB0aGUgY2hhbmdlcyBmcm9tIHRoZSBmaWxlLCBpZiBhbnku ICovCisJCQlpZiAocGFfaGFzX3Nwb29sZWRfbWVzc2FnZV9wZW5kaW5nKCkpCisJCQl7CisJCQkJ cGFfc3Bvb2xlZF9tZXNzYWdlcygpOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCWludAkJCXJj OworCisJCQkJLyogV2FpdCBmb3IgbW9yZSB3b3JrLiAqLworCQkJCXJjID0gV2FpdExhdGNoKE15 TGF0Y2gsCisJCQkJCQkJICAgV0xfTEFUQ0hfU0VUIHwgV0xfVElNRU9VVCB8IFdMX0VYSVRfT05f UE1fREVBVEgsCisJCQkJCQkJICAgMTAwMEwsCisJCQkJCQkJICAgV0FJVF9FVkVOVF9MT0dJQ0FM X1BBUkFMTEVMX0FQUExZX01BSU4pOworCisJCQkJaWYgKHJjICYgV0xfTEFUQ0hfU0VUKQorCQkJ CQlSZXNldExhdGNoKE15TGF0Y2gpOworCQkJfQorCQl9CisJCWVsc2UKKwkJeworCQkJQXNzZXJ0 KHNobXFfcmVzID09IFNITV9NUV9ERVRBQ0hFRCk7CisKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJ CShlcnJjb2RlKEVSUkNPREVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUpLAorCQkJ CQkgZXJybXNnKCJsb3N0IGNvbm5lY3Rpb24gdG8gdGhlIGxvZ2ljYWwgcmVwbGljYXRpb24gYXBw bHkgd29ya2VyIikpKTsKKwkJfQorCisJCU1lbW9yeUNvbnRleHRSZXNldChBcHBseU1lc3NhZ2VD b250ZXh0KTsKKwkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN4dCk7CisJfQorCisJLyogUG9w IHRoZSBlcnJvciBjb250ZXh0IHN0YWNrLiAqLworCWVycm9yX2NvbnRleHRfc3RhY2sgPSBlcnJj YWxsYmFjay5wcmV2aW91czsKKworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjeHQpOworfQor CisvKgorICogTWFrZSBzdXJlIHRoZSBsZWFkZXIgYXBwbHkgd29ya2VyIHRyaWVzIHRvIHJlYWQg ZnJvbSBvdXIgZXJyb3IgcXVldWUgb25lIG1vcmUKKyAqIHRpbWUuIFRoaXMgZ3VhcmRzIGFnYWlu c3QgdGhlIGNhc2Ugd2hlcmUgd2UgZXhpdCB1bmNsZWFubHkgd2l0aG91dCBzZW5kaW5nCisgKiBh biBFcnJvclJlc3BvbnNlLCBmb3IgZXhhbXBsZSBiZWNhdXNlIHNvbWUgY29kZSBjYWxscyBwcm9j X2V4aXQgZGlyZWN0bHkuCisgKi8KK3N0YXRpYyB2b2lkCitwYV9zaHV0ZG93bihpbnQgY29kZSwg RGF0dW0gYXJnKQoreworCVNlbmRQcm9jU2lnbmFsKE15TG9naWNhbFJlcFdvcmtlci0+YXBwbHlf bGVhZGVyX3BpZCwKKwkJCQkgICBQUk9DU0lHX1BBUkFMTEVMX0FQUExZX01FU1NBR0UsCisJCQkJ ICAgSW52YWxpZEJhY2tlbmRJZCk7CisKKwlkc21fZGV0YWNoKChkc21fc2VnbWVudCAqKSBEYXR1 bUdldFBvaW50ZXIoYXJnKSk7Cit9CisKKy8qCisgKiBQYXJhbGxlbCBhcHBseSB3b3JrZXIgZW50 cnkgcG9pbnQuCisgKi8KK3ZvaWQKK1BhcmFsbGVsQXBwbHlXb3JrZXJNYWluKERhdHVtIG1haW5f YXJnKQoreworCVBhcmFsbGVsQXBwbHlXb3JrZXJTaGFyZWQgKnNoYXJlZDsKKwlkc21faGFuZGxl CWhhbmRsZTsKKwlkc21fc2VnbWVudCAqc2VnOworCXNobV90b2MgICAgKnRvYzsKKwlzaG1fbXEJ ICAgKm1xOworCXNobV9tcV9oYW5kbGUgKm1xaDsKKwlzaG1fbXFfaGFuZGxlICplcnJvcl9tcWg7 CisJUmVwT3JpZ2luSWQgb3JpZ2luaWQ7CisJaW50CQkJd29ya2VyX3Nsb3QgPSBEYXR1bUdldElu dDMyKG1haW5fYXJnKTsKKwljaGFyCQlvcmlnaW5uYW1lW05BTUVEQVRBTEVOXTsKKworCS8qIFNl dHVwIHNpZ25hbCBoYW5kbGluZy4gKi8KKwlwcXNpZ25hbChTSUdIVVAsIFNpZ25hbEhhbmRsZXJG b3JDb25maWdSZWxvYWQpOworCXBxc2lnbmFsKFNJR0lOVCwgU2lnbmFsSGFuZGxlckZvclNodXRk b3duUmVxdWVzdCk7CisJcHFzaWduYWwoU0lHVEVSTSwgZGllKTsKKwlCYWNrZ3JvdW5kV29ya2Vy VW5ibG9ja1NpZ25hbHMoKTsKKworCS8qCisJICogQXR0YWNoIHRvIHRoZSBkeW5hbWljIHNoYXJl ZCBtZW1vcnkgc2VnbWVudCBmb3IgdGhlIHBhcmFsbGVsIGFwcGx5LCBhbmQKKwkgKiBmaW5kIGl0 cyB0YWJsZSBvZiBjb250ZW50cy4KKwkgKgorCSAqIExpa2UgcGFyYWxsZWwgcXVlcnksIHdlIGRv bid0IG5lZWQgcmVzb3VyY2Ugb3duZXIgYnkgdGhpcyB0aW1lLiBTZWUKKwkgKiBQYXJhbGxlbFdv cmtlck1haW4uCisJICovCisJbWVtY3B5KCZoYW5kbGUsIE15Qmd3b3JrZXJFbnRyeS0+Ymd3X2V4 dHJhLCBzaXplb2YoZHNtX2hhbmRsZSkpOworCXNlZyA9IGRzbV9hdHRhY2goaGFuZGxlKTsKKwlp ZiAoIXNlZykKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX09CSkVDVF9O T1RfSU5fUFJFUkVRVUlTSVRFX1NUQVRFKSwKKwkJCQkgZXJybXNnKCJ1bmFibGUgdG8gbWFwIGR5 bmFtaWMgc2hhcmVkIG1lbW9yeSBzZWdtZW50IikpKTsKKworCXRvYyA9IHNobV90b2NfYXR0YWNo KFBHX0xPR0lDQUxfQVBQTFlfU0hNX01BR0lDLCBkc21fc2VnbWVudF9hZGRyZXNzKHNlZykpOwor CWlmICghdG9jKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfT0JKRUNU X05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUpLAorCQkJCSBlcnJtc2coImJhZCBtYWdpYyBudW1i ZXIgaW4gZHluYW1pYyBzaGFyZWQgbWVtb3J5IHNlZ21lbnQiKSkpOworCisJYmVmb3JlX3NobWVt X2V4aXQocGFfc2h1dGRvd24sIFBvaW50ZXJHZXREYXR1bShzZWcpKTsKKworCS8qIExvb2sgdXAg dGhlIHNoYXJlZCBpbmZvcm1hdGlvbi4gKi8KKwlzaGFyZWQgPSBzaG1fdG9jX2xvb2t1cCh0b2Ms IFBBUkFMTEVMX0FQUExZX0tFWV9TSEFSRUQsIGZhbHNlKTsKKwlNeVBhcmFsbGVsU2hhcmVkID0g c2hhcmVkOworCisJLyoKKwkgKiBBdHRhY2ggdG8gdGhlIG1lc3NhZ2UgcXVldWUuCisJICovCisJ bXEgPSBzaG1fdG9jX2xvb2t1cCh0b2MsIFBBUkFMTEVMX0FQUExZX0tFWV9NUSwgZmFsc2UpOwor CXNobV9tcV9zZXRfcmVjZWl2ZXIobXEsIE15UHJvYyk7CisJbXFoID0gc2htX21xX2F0dGFjaCht cSwgc2VnLCBOVUxMKTsKKworCS8qCisJICogUHJpbWFyeSBpbml0aWFsaXphdGlvbiBpcyBjb21w bGV0ZS4gTm93LCB3ZSBjYW4gYXR0YWNoIHRvIG91ciBzbG90LgorCSAqIFRoaXMgaXMgdG8gZW5z dXJlIHRoYXQgdGhlIGxlYWRlciBhcHBseSB3b3JrZXIgZG9lcyBub3Qgd3JpdGUgZGF0YSB0bwor CSAqIHRoZSB1bmluaXRpYWxpemVkIG1lbW9yeSBxdWV1ZS4KKwkgKi8KKwlsb2dpY2FscmVwX3dv cmtlcl9hdHRhY2god29ya2VyX3Nsb3QpOworCisJU3BpbkxvY2tBY3F1aXJlKCZNeVBhcmFsbGVs U2hhcmVkLT5tdXRleCk7CisJTXlQYXJhbGxlbFNoYXJlZC0+bG9naWNhbHJlcF93b3JrZXJfZ2Vu ZXJhdGlvbiA9IE15TG9naWNhbFJlcFdvcmtlci0+Z2VuZXJhdGlvbjsKKwlNeVBhcmFsbGVsU2hh cmVkLT5sb2dpY2FscmVwX3dvcmtlcl9zbG90X25vID0gd29ya2VyX3Nsb3Q7CisJU3BpbkxvY2tS ZWxlYXNlKCZNeVBhcmFsbGVsU2hhcmVkLT5tdXRleCk7CisKKwkvKgorCSAqIEF0dGFjaCB0byB0 aGUgZXJyb3IgcXVldWUuCisJICovCisJbXEgPSBzaG1fdG9jX2xvb2t1cCh0b2MsIFBBUkFMTEVM X0FQUExZX0tFWV9FUlJPUl9RVUVVRSwgZmFsc2UpOworCXNobV9tcV9zZXRfc2VuZGVyKG1xLCBN eVByb2MpOworCWVycm9yX21xaCA9IHNobV9tcV9hdHRhY2gobXEsIHNlZywgTlVMTCk7CisKKwlw cV9yZWRpcmVjdF90b19zaG1fbXEoc2VnLCBlcnJvcl9tcWgpOworCXBxX3NldF9wYXJhbGxlbF9s ZWFkZXIoTXlMb2dpY2FsUmVwV29ya2VyLT5hcHBseV9sZWFkZXJfcGlkLAorCQkJCQkJICAgSW52 YWxpZEJhY2tlbmRJZCk7CisKKwlNeUxvZ2ljYWxSZXBXb3JrZXItPmxhc3Rfc2VuZF90aW1lID0g TXlMb2dpY2FsUmVwV29ya2VyLT5sYXN0X3JlY3ZfdGltZSA9CisJCU15TG9naWNhbFJlcFdvcmtl ci0+cmVwbHlfdGltZSA9IDA7CisKKwlJbml0aWFsaXplQXBwbHlXb3JrZXIoKTsKKworCS8qIFNl dHVwIHJlcGxpY2F0aW9uIG9yaWdpbiB0cmFja2luZy4gKi8KKwlTdGFydFRyYW5zYWN0aW9uQ29t bWFuZCgpOworCVJlcGxpY2F0aW9uT3JpZ2luTmFtZUZvckxvZ2ljYWxSZXAoTXlTdWJzY3JpcHRp b24tPm9pZCwgSW52YWxpZE9pZCwKKwkJCQkJCQkJCSAgIG9yaWdpbm5hbWUsIHNpemVvZihvcmln aW5uYW1lKSk7CisJb3JpZ2luaWQgPSByZXBsb3JpZ2luX2J5X25hbWUob3JpZ2lubmFtZSwgZmFs c2UpOworCisJLyoKKwkgKiBUaGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyIGRvZXNuJ3QgbmVlZCB0 byBtb25vcG9saXplIHRoaXMgcmVwbGljYXRpb24KKwkgKiBvcmlnaW4gd2hpY2ggd2FzIGFscmVh ZHkgYWNxdWlyZWQgYnkgaXRzIGxlYWRlciBwcm9jZXNzLgorCSAqLworCXJlcGxvcmlnaW5fc2Vz c2lvbl9zZXR1cChvcmlnaW5pZCwgTXlMb2dpY2FsUmVwV29ya2VyLT5hcHBseV9sZWFkZXJfcGlk KTsKKwlyZXBsb3JpZ2luX3Nlc3Npb25fb3JpZ2luID0gb3JpZ2luaWQ7CisJQ29tbWl0VHJhbnNh Y3Rpb25Db21tYW5kKCk7CisKKwkvKgorCSAqIFNldHVwIGNhbGxiYWNrIGZvciBzeXNjYWNoZSBz byB0aGF0IHdlIGtub3cgd2hlbiBzb21ldGhpbmcgY2hhbmdlcyBpbgorCSAqIHRoZSBzdWJzY3Jp cHRpb24gcmVsYXRpb24gc3RhdGUuCisJICovCisJQ2FjaGVSZWdpc3RlclN5c2NhY2hlQ2FsbGJh Y2soU1VCU0NSSVBUSU9OUkVMTUFQLAorCQkJCQkJCQkgIGludmFsaWRhdGVfc3luY2luZ190YWJs ZV9zdGF0ZXMsCisJCQkJCQkJCSAgKERhdHVtKSAwKTsKKworCXNldF9hcHBseV9lcnJvcl9jb250 ZXh0X29yaWdpbihvcmlnaW5uYW1lKTsKKworCUxvZ2ljYWxQYXJhbGxlbEFwcGx5TG9vcChtcWgp OworCisJLyoKKwkgKiBUaGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyIG11c3Qgbm90IGdldCBoZXJl IGJlY2F1c2UgdGhlIHBhcmFsbGVsIGFwcGx5CisJICogd29ya2VyIHdpbGwgb25seSBzdG9wIHdo ZW4gaXQgcmVjZWl2ZXMgYSBTSUdURVJNIG9yIFNJR0lOVCBmcm9tIHRoZQorCSAqIGxlYWRlciwg b3Igd2hlbiB0aGVyZSB0aGVyZSBpcyBhbiBlcnJvci4gTm9uZSBvZiB0aGVzZSBjYXNlcyB3aWxs IGFsbG93CisJICogdGhlIGNvZGUgdG8gcmVhY2ggaGVyZS4KKwkgKi8KKwlBc3NlcnQoZmFsc2Up OworfQorCisvKgorICogSGFuZGxlIHJlY2VpcHQgb2YgYW4gaW50ZXJydXB0IGluZGljYXRpbmcg YSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgbWVzc2FnZS4KKyAqCisgKiBOb3RlOiB0aGlzIGlzIGNh bGxlZCB3aXRoaW4gYSBzaWduYWwgaGFuZGxlciEgQWxsIHdlIGNhbiBkbyBpcyBzZXQgYSBmbGFn CisgKiB0aGF0IHdpbGwgY2F1c2UgdGhlIG5leHQgQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKSB0byBp bnZva2UKKyAqIEhhbmRsZVBhcmFsbGVsQXBwbHlNZXNzYWdlcygpLgorICovCit2b2lkCitIYW5k bGVQYXJhbGxlbEFwcGx5TWVzc2FnZUludGVycnVwdCh2b2lkKQoreworCUludGVycnVwdFBlbmRp bmcgPSB0cnVlOworCVBhcmFsbGVsQXBwbHlNZXNzYWdlUGVuZGluZyA9IHRydWU7CisJU2V0TGF0 Y2goTXlMYXRjaCk7Cit9CisKKy8qCisgKiBIYW5kbGUgYSBzaW5nbGUgcHJvdG9jb2wgbWVzc2Fn ZSByZWNlaXZlZCBmcm9tIGEgc2luZ2xlIHBhcmFsbGVsIGFwcGx5CisgKiB3b3JrZXIuCisgKi8K K3N0YXRpYyB2b2lkCitIYW5kbGVQYXJhbGxlbEFwcGx5TWVzc2FnZShTdHJpbmdJbmZvIG1zZykK K3sKKwljaGFyCQltc2d0eXBlOworCisJbXNndHlwZSA9IHBxX2dldG1zZ2J5dGUobXNnKTsKKwor CXN3aXRjaCAobXNndHlwZSkKKwl7CisJCWNhc2UgJ0UnOgkJCQkvKiBFcnJvclJlc3BvbnNlICov CisJCQl7CisJCQkJRXJyb3JEYXRhCWVkYXRhOworCisJCQkJLyogUGFyc2UgRXJyb3JSZXNwb25z ZS4gKi8KKwkJCQlwcV9wYXJzZV9lcnJvcm5vdGljZShtc2csICZlZGF0YSk7CisKKwkJCQkvKgor CQkJCSAqIElmIGRlc2lyZWQsIGFkZCBhIGNvbnRleHQgbGluZSB0byBzaG93IHRoYXQgdGhpcyBp cyBhCisJCQkJICogbWVzc2FnZSBwcm9wYWdhdGVkIGZyb20gYSBwYXJhbGxlbCBhcHBseSB3b3Jr ZXIuIE90aGVyd2lzZSwKKwkJCQkgKiBpdCBjYW4gc29tZXRpbWVzIGJlIGNvbmZ1c2luZyB0byB1 bmRlcnN0YW5kIHdoYXQgYWN0dWFsbHkKKwkJCQkgKiBoYXBwZW5lZC4KKwkJCQkgKi8KKwkJCQlp ZiAoZWRhdGEuY29udGV4dCkKKwkJCQkJZWRhdGEuY29udGV4dCA9IHBzcHJpbnRmKCIlc1xuJXMi LCBlZGF0YS5jb250ZXh0LAorCQkJCQkJCQkJCQkgXygibG9naWNhbCByZXBsaWNhdGlvbiBwYXJh bGxlbCBhcHBseSB3b3JrZXIiKSk7CisJCQkJZWxzZQorCQkJCQllZGF0YS5jb250ZXh0ID0gcHN0 cmR1cChfKCJsb2dpY2FsIHJlcGxpY2F0aW9uIHBhcmFsbGVsIGFwcGx5IHdvcmtlciIpKTsKKwor CQkJCS8qCisJCQkJICogQ29udGV4dCBiZXlvbmQgdGhhdCBzaG91bGQgdXNlIHRoZSBlcnJvciBj b250ZXh0IGNhbGxiYWNrcworCQkJCSAqIHRoYXQgd2VyZSBpbiBlZmZlY3QgaW4gTG9naWNhbFJl cEFwcGx5TG9vcCgpLgorCQkJCSAqLworCQkJCWVycm9yX2NvbnRleHRfc3RhY2sgPSBhcHBseV9l cnJvcl9jb250ZXh0X3N0YWNrOworCisJCQkJLyoKKwkJCQkgKiBUaGUgYWN0dWFsIGVycm9yIG11 c3QgaGF2ZSBiZWVuIHJlcG9ydGVkIGJ5IHRoZSBwYXJhbGxlbAorCQkJCSAqIGFwcGx5IHdvcmtl ci4KKwkJCQkgKi8KKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9P QkpFQ1RfTk9UX0lOX1BSRVJFUVVJU0lURV9TVEFURSksCisJCQkJCQkgZXJybXNnKCJsb2dpY2Fs IHJlcGxpY2F0aW9uIHBhcmFsbGVsIGFwcGx5IHdvcmtlciBleGl0ZWQgZHVlIHRvIGVycm9yIiks CisJCQkJCQkgZXJyY29udGV4dCgiJXMiLCBlZGF0YS5jb250ZXh0KSkpOworCQkJfQorCisJCQkv KgorCQkJICogRG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZyBhYm91dCBOb3RpY2VSZXNwb25zZSBh bmQKKwkJCSAqIE5vdGlmeVJlc3BvbnNlIGFzIHRoZSBsb2dpY2FsIHJlcGxpY2F0aW9uIHdvcmtl ciBkb2Vzbid0IG5lZWQKKwkJCSAqIHRvIHNlbmQgbWVzc2FnZXMgdG8gdGhlIGNsaWVudC4KKwkJ CSAqLworCQljYXNlICdOJzoKKwkJY2FzZSAnQSc6CisJCQlicmVhazsKKworCQlkZWZhdWx0Ogor CQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBtZXNzYWdlIHR5cGUgcmVjZWl2ZWQgZnJvbSBs b2dpY2FsIHJlcGxpY2F0aW9uIHBhcmFsbGVsIGFwcGx5IHdvcmtlcjogJWMgKG1lc3NhZ2UgbGVu Z3RoICVkIGJ5dGVzKSIsCisJCQkJIG1zZ3R5cGUsIG1zZy0+bGVuKTsKKwl9Cit9CisKKy8qCisg KiBIYW5kbGUgYW55IHF1ZXVlZCBwcm90b2NvbCBtZXNzYWdlcyByZWNlaXZlZCBmcm9tIHBhcmFs bGVsIGFwcGx5IHdvcmtlcnMuCisgKi8KK3ZvaWQKK0hhbmRsZVBhcmFsbGVsQXBwbHlNZXNzYWdl cyh2b2lkKQoreworCUxpc3RDZWxsICAgKmxjOworCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsK KworCXN0YXRpYyBNZW1vcnlDb250ZXh0IGhwYW1fY29udGV4dCA9IE5VTEw7CisKKwkvKgorCSAq IFRoaXMgaXMgaW52b2tlZCBmcm9tIFByb2Nlc3NJbnRlcnJ1cHRzKCksIGFuZCBzaW5jZSBzb21l IG9mIHRoZQorCSAqIGZ1bmN0aW9ucyBpdCBjYWxscyBjb250YWluIENIRUNLX0ZPUl9JTlRFUlJV UFRTKCksIHRoZXJlIGlzIGEgcG90ZW50aWFsCisJICogZm9yIHJlY3Vyc2l2ZSBjYWxscyBpZiBt b3JlIHNpZ25hbHMgYXJlIHJlY2VpdmVkIHdoaWxlIHRoaXMgcnVucy4gSXQncworCSAqIHVuY2xl YXIgdGhhdCByZWN1cnNpdmUgZW50cnkgd291bGQgYmUgc2FmZSwgYW5kIGl0IGRvZXNuJ3Qgc2Vl bSB1c2VmdWwKKwkgKiBldmVuIGlmIGl0IGlzIHNhZmUsIHNvIGxldCdzIGJsb2NrIGludGVycnVw dHMgdW50aWwgZG9uZS4KKwkgKi8KKwlIT0xEX0lOVEVSUlVQVFMoKTsKKworCS8qCisJICogTW9y ZW92ZXIsIEN1cnJlbnRNZW1vcnlDb250ZXh0IG1pZ2h0IGJlIHBvaW50aW5nIGFsbW9zdCBhbnl3 aGVyZS4gV2UKKwkgKiBkb24ndCB3YW50IHRvIHJpc2sgbGVha2luZyBkYXRhIGludG8gbG9uZy1s aXZlZCBjb250ZXh0cywgc28gbGV0J3MgZG8KKwkgKiBvdXIgd29yayBoZXJlIGluIGEgcHJpdmF0 ZSBjb250ZXh0IHRoYXQgd2UgY2FuIHJlc2V0IG9uIGVhY2ggdXNlLgorCSAqLworCWlmICghaHBh bV9jb250ZXh0KQkJCS8qIGZpcnN0IHRpbWUgdGhyb3VnaD8gKi8KKwkJaHBhbV9jb250ZXh0ID0g QWxsb2NTZXRDb250ZXh0Q3JlYXRlKFRvcE1lbW9yeUNvbnRleHQsCisJCQkJCQkJCQkJCSAiSGFu ZGxlUGFyYWxsZWxBcHBseU1lc3NhZ2VzIiwKKwkJCQkJCQkJCQkJIEFMTE9DU0VUX0RFRkFVTFRf U0laRVMpOworCWVsc2UKKwkJTWVtb3J5Q29udGV4dFJlc2V0KGhwYW1fY29udGV4dCk7CisKKwlv bGRjb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKGhwYW1fY29udGV4dCk7CisKKwlQYXJh bGxlbEFwcGx5TWVzc2FnZVBlbmRpbmcgPSBmYWxzZTsKKworCWZvcmVhY2gobGMsIFBhcmFsbGVs QXBwbHlXb3JrZXJQb29sKQorCXsKKwkJc2htX21xX3Jlc3VsdCByZXM7CisJCVNpemUJCW5ieXRl czsKKwkJdm9pZAkgICAqZGF0YTsKKwkJUGFyYWxsZWxBcHBseVdvcmtlckluZm8gKndpbmZvID0g KFBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICopIGxmaXJzdChsYyk7CisKKwkJLyoKKwkJICogVGhl IGxlYWRlciB3aWxsIGRldGFjaCBmcm9tIHRoZSBlcnJvciBxdWV1ZSBhbmQgc2V0IGl0IHRvIE5V TEwKKwkJICogYmVmb3JlIHByZXBhcmluZyB0byBzdG9wIGFsbCBwYXJhbGxlbCBhcHBseSB3b3Jr ZXJzLCBzbyB3ZSBkb24ndAorCQkgKiBuZWVkIHRvIGhhbmRsZSBlcnJvciBtZXNzYWdlcyBhbnlt b3JlLiBTZWUKKwkJICogbG9naWNhbHJlcF93b3JrZXJfZGV0YWNoLgorCQkgKi8KKwkJaWYgKCF3 aW5mby0+ZXJyb3JfbXFfaGFuZGxlKQorCQkJY29udGludWU7CisKKwkJcmVzID0gc2htX21xX3Jl Y2VpdmUod2luZm8tPmVycm9yX21xX2hhbmRsZSwgJm5ieXRlcywgJmRhdGEsIHRydWUpOworCisJ CWlmIChyZXMgPT0gU0hNX01RX1dPVUxEX0JMT0NLKQorCQkJY29udGludWU7CisJCWVsc2UgaWYg KHJlcyA9PSBTSE1fTVFfU1VDQ0VTUykKKwkJeworCQkJU3RyaW5nSW5mb0RhdGEgbXNnOworCisJ CQlpbml0U3RyaW5nSW5mbygmbXNnKTsKKwkJCWFwcGVuZEJpbmFyeVN0cmluZ0luZm8oJm1zZywg ZGF0YSwgbmJ5dGVzKTsKKwkJCUhhbmRsZVBhcmFsbGVsQXBwbHlNZXNzYWdlKCZtc2cpOworCQkJ cGZyZWUobXNnLmRhdGEpOworCQl9CisJCWVsc2UKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShl cnJjb2RlKEVSUkNPREVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUpLAorCQkJCQkg ZXJybXNnKCJsb3N0IGNvbm5lY3Rpb24gdG8gdGhlIGxvZ2ljYWwgcmVwbGljYXRpb24gcGFyYWxs ZWwgYXBwbHkgd29ya2VyIikpKTsKKwl9CisKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29u dGV4dCk7CisKKwkvKiBNaWdodCBhcyB3ZWxsIGNsZWFyIHRoZSBjb250ZXh0IG9uIG91ciB3YXkg b3V0ICovCisJTWVtb3J5Q29udGV4dFJlc2V0KGhwYW1fY29udGV4dCk7CisKKwlSRVNVTUVfSU5U RVJSVVBUUygpOworfQorCisvKgorICogU2VuZCB0aGUgZGF0YSB0byB0aGUgc3BlY2lmaWVkIHBh cmFsbGVsIGFwcGx5IHdvcmtlciB2aWEgc2hhcmVkLW1lbW9yeQorICogcXVldWUuCisgKgorICog UmV0dXJuIGZhbHNlIGlmIHRoZSBhdHRlbXB0IHRvIHNlbmQgZGF0YSB2aWEgc2hhcmVkIG1lbW9y eSB0aW1lcyBvdXQsIHRydWUKKyAqIG90aGVyd2lzZS4KKyAqLworYm9vbAorcGFfc2VuZF9kYXRh KFBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICp3aW5mbywgU2l6ZSBuYnl0ZXMsIGNvbnN0IHZvaWQg KmRhdGEpCit7CisJaW50CQkJcmM7CisJc2htX21xX3Jlc3VsdCByZXN1bHQ7CisJVGltZXN0YW1w VHogc3RhcnRUaW1lID0gMDsKKworCUFzc2VydCghSXNUcmFuc2FjdGlvblN0YXRlKCkpOworCUFz c2VydCghd2luZm8tPnNlcmlhbGl6ZV9jaGFuZ2VzKTsKKworLyoKKyAqIFRoaXMgdGltZW91dCBp cyBhIGJpdCBhcmJpdHJhcnkgYnV0IHRlc3RpbmcgcmV2ZWFsZWQgdGhhdCBpdCBpcyBzdWZmaWNp ZW50CisgKiB0byBzZW5kIHRoZSBtZXNzYWdlIHVubGVzcyB0aGUgcGFyYWxsZWwgYXBwbHkgd29y a2VyIGlzIHdhaXRpbmcgb24gc29tZQorICogbG9jayBvciB0aGVyZSBpcyBhIHNlcmlvdXMgcmVz b3VyY2UgY3J1bmNoLiBTZWUgdGhlIGNvbW1lbnRzIGF0b3AgdGhpcyBmaWxlCisgKiB0byBrbm93 IHdoeSB3ZSBhcmUgdXNpbmcgYSBub24tYmxvY2tpbmcgd2F5IHRvIHNlbmQgdGhlIG1lc3NhZ2Uu CisgKi8KKyNkZWZpbmUgU0hNX1NFTkRfUkVUUllfSU5URVJWQUxfTVMgMTAwMAorI2RlZmluZSBT SE1fU0VORF9USU1FT1VUX01TCQkoMTAwMDAgLSBTSE1fU0VORF9SRVRSWV9JTlRFUlZBTF9NUykK KworCWZvciAoOzspCisJeworCQlyZXN1bHQgPSBzaG1fbXFfc2VuZCh3aW5mby0+bXFfaGFuZGxl LCBuYnl0ZXMsIGRhdGEsIHRydWUsIHRydWUpOworCisJCWlmIChyZXN1bHQgPT0gU0hNX01RX1NV Q0NFU1MpCisJCQlyZXR1cm4gdHJ1ZTsKKwkJZWxzZSBpZiAocmVzdWx0ID09IFNITV9NUV9ERVRB Q0hFRCkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfT0JKRUNUX05P VF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUpLAorCQkJCQkgZXJybXNnKCJjb3VsZCBub3Qgc2VuZCBk YXRhIHRvIHNoYXJlZC1tZW1vcnkgcXVldWUiKSkpOworCisJCUFzc2VydChyZXN1bHQgPT0gU0hN X01RX1dPVUxEX0JMT0NLKTsKKworCQkvKiBXYWl0IGJlZm9yZSByZXRyeWluZy4gKi8KKwkJcmMg PSBXYWl0TGF0Y2goTXlMYXRjaCwKKwkJCQkJICAgV0xfTEFUQ0hfU0VUIHwgV0xfVElNRU9VVCB8 IFdMX0VYSVRfT05fUE1fREVBVEgsCisJCQkJCSAgIFNITV9TRU5EX1JFVFJZX0lOVEVSVkFMX01T LAorCQkJCQkgICBXQUlUX0VWRU5UX0xPR0lDQUxfUEFSQUxMRUxfQVBQTFlfU1RBVEVfQ0hBTkdF KTsKKworCQlpZiAocmMgJiBXTF9MQVRDSF9TRVQpCisJCXsKKwkJCVJlc2V0TGF0Y2goTXlMYXRj aCk7CisJCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOworCQl9CisKKwkJaWYgKHN0YXJ0VGltZSA9 PSAwKQorCQkJc3RhcnRUaW1lID0gR2V0Q3VycmVudFRpbWVzdGFtcCgpOworCQllbHNlIGlmIChU aW1lc3RhbXBEaWZmZXJlbmNlRXhjZWVkcyhzdGFydFRpbWUsIEdldEN1cnJlbnRUaW1lc3RhbXAo KSwKKwkJCQkJCQkJCQkJU0hNX1NFTkRfVElNRU9VVF9NUykpCisJCXsKKwkJCWVyZXBvcnQoTE9H LAorCQkJCQkoZXJybXNnKCJsb2dpY2FsIHJlcGxpY2F0aW9uIGFwcGx5IHdvcmtlciB3aWxsIHNl cmlhbGl6ZSB0aGUgcmVtYWluaW5nIGNoYW5nZXMgb2YgcmVtb3RlIHRyYW5zYWN0aW9uICV1IHRv IGEgZmlsZSIsCisJCQkJCQkJd2luZm8tPnNoYXJlZC0+eGlkKSkpOworCQkJcmV0dXJuIGZhbHNl OworCQl9CisJfQorfQorCisvKgorICogU3dpdGNoIHRvIFBBUlRJQUxfU0VSSUFMSVpFIG1vZGUg Zm9yIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uIC0tIHRoaXMgbWVhbnMKKyAqIHRoYXQgdGhlIGN1 cnJlbnQgZGF0YSBhbmQgYW55IHN1YnNlcXVlbnQgZGF0YSBmb3IgdGhpcyB0cmFuc2FjdGlvbiB3 aWxsIGJlCisgKiBzZXJpYWxpemVkIHRvIGEgZmlsZS4gVGhpcyBpcyBkb25lIHRvIHByZXZlbnQg cG9zc2libGUgZGVhZGxvY2tzIHdpdGgKKyAqIGFub3RoZXIgcGFyYWxsZWwgYXBwbHkgd29ya2Vy IChyZWZlciB0byB0aGUgY29tbWVudHMgYXRvcCB0aGlzIGZpbGUpLgorICovCit2b2lkCitwYV9z d2l0Y2hfdG9fcGFydGlhbF9zZXJpYWxpemUoUGFyYWxsZWxBcHBseVdvcmtlckluZm8gKndpbmZv LAorCQkJCQkJCSAgIGJvb2wgc3RyZWFtX2xvY2tlZCkKK3sKKwkvKgorCSAqIFRoZSBwYXJhbGxl bCBhcHBseSB3b3JrZXIgY291bGQgYmUgc3R1Y2sgZm9yIHNvbWUgcmVhc29uIChzYXkgd2FpdGlu ZworCSAqIG9uIHNvbWUgbG9jayBieSBvdGhlciBiYWNrZW5kKSwgc28gc3RvcCB0cnlpbmcgdG8g c2VuZCBkYXRhIGRpcmVjdGx5IHRvCisJICogaXQgYW5kIHN0YXJ0IHNlcmlhbGl6aW5nIGRhdGEg dG8gdGhlIGZpbGUgaW5zdGVhZC4KKwkgKi8KKwl3aW5mby0+c2VyaWFsaXplX2NoYW5nZXMgPSB0 cnVlOworCisJLyogSW5pdGlhbGl6ZSB0aGUgc3RyZWFtIGZpbGVzZXQuICovCisJc3RyZWFtX3N0 YXJ0X2ludGVybmFsKHdpbmZvLT5zaGFyZWQtPnhpZCwgdHJ1ZSk7CisKKwkvKgorCSAqIEFjcXVp cmVzIHRoZSBzdHJlYW0gbG9jayBpZiBub3QgYWxyZWFkeSB0byBtYWtlIHN1cmUgdGhhdCB0aGUg cGFyYWxsZWwKKwkgKiBhcHBseSB3b3JrZXIgd2lsbCB3YWl0IGZvciB0aGUgbGVhZGVyIHRvIHJl bGVhc2UgdGhlIHN0cmVhbSBsb2NrIHVudGlsCisJICogdGhlIGVuZCBvZiB0aGUgdHJhbnNhY3Rp b24uCisJICovCisJaWYgKCFzdHJlYW1fbG9ja2VkKQorCQlwYV9sb2NrX3N0cmVhbSh3aW5mby0+ c2hhcmVkLT54aWQsIEFjY2Vzc0V4Y2x1c2l2ZUxvY2spOworCisJcGFfc2V0X2ZpbGVzZXRfc3Rh dGUod2luZm8tPnNoYXJlZCwgRlNfU0VSSUFMSVpFX0lOX1BST0dSRVNTKTsKK30KKworLyoKKyAq IFdhaXQgdW50aWwgdGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlcidzIHRyYW5zYWN0aW9uIHN0YXRl IGhhcyByZWFjaGVkIG9yCisgKiBleGNlZWRlZCB0aGUgZ2l2ZW4geGFjdF9zdGF0ZS4KKyAqLwor c3RhdGljIHZvaWQKK3BhX3dhaXRfZm9yX3hhY3Rfc3RhdGUoUGFyYWxsZWxBcHBseVdvcmtlcklu Zm8gKndpbmZvLAorCQkJCQkgICBQYXJhbGxlbFRyYW5zU3RhdGUgeGFjdF9zdGF0ZSkKK3sKKwlm b3IgKDs7KQorCXsKKwkJLyoKKwkJICogU3RvcCBpZiB0aGUgdHJhbnNhY3Rpb24gc3RhdGUgaGFz IHJlYWNoZWQgb3IgZXhjZWVkZWQgdGhlIGdpdmVuCisJCSAqIHhhY3Rfc3RhdGUuCisJCSAqLwor CQlpZiAocGFfZ2V0X3hhY3Rfc3RhdGUod2luZm8tPnNoYXJlZCkgPj0geGFjdF9zdGF0ZSkKKwkJ CWJyZWFrOworCisJCS8qIFdhaXQgdG8gYmUgc2lnbmFsbGVkLiAqLworCQkodm9pZCkgV2FpdExh dGNoKE15TGF0Y2gsCisJCQkJCQkgV0xfTEFUQ0hfU0VUIHwgV0xfVElNRU9VVCB8IFdMX0VYSVRf T05fUE1fREVBVEgsCisJCQkJCQkgMTBMLAorCQkJCQkJIFdBSVRfRVZFTlRfTE9HSUNBTF9QQVJB TExFTF9BUFBMWV9TVEFURV9DSEFOR0UpOworCisJCS8qIFJlc2V0IHRoZSBsYXRjaCBzbyB3ZSBk b24ndCBzcGluLiAqLworCQlSZXNldExhdGNoKE15TGF0Y2gpOworCisJCS8qIEFuIGludGVycnVw dCBtYXkgaGF2ZSBvY2N1cnJlZCB3aGlsZSB3ZSB3ZXJlIHdhaXRpbmcuICovCisJCUNIRUNLX0ZP Ul9JTlRFUlJVUFRTKCk7CisJfQorfQorCisvKgorICogV2FpdCB1bnRpbCB0aGUgcGFyYWxsZWwg YXBwbHkgd29ya2VyJ3MgdHJhbnNhY3Rpb24gZmluaXNoZXMuCisgKi8KK3N0YXRpYyB2b2lkCitw YV93YWl0X2Zvcl94YWN0X2ZpbmlzaChQYXJhbGxlbEFwcGx5V29ya2VySW5mbyAqd2luZm8pCit7 CisJLyoKKwkgKiBXYWl0IHVudGlsIHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgc2V0IHRoZSBz dGF0ZSB0bworCSAqIFBBUkFMTEVMX1RSQU5TX1NUQVJURUQgd2hpY2ggbWVhbnMgaXQgaGFzIGFj cXVpcmVkIHRoZSB0cmFuc2FjdGlvbgorCSAqIGxvY2suIFRoaXMgaXMgdG8gcHJldmVudCBsZWFk ZXIgYXBwbHkgd29ya2VyIGZyb20gYWNxdWlyaW5nIHRoZQorCSAqIHRyYW5zYWN0aW9uIGxvY2sg ZWFybGllciB0aGFuIHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIuCisJICovCisJcGFfd2FpdF9m b3JfeGFjdF9zdGF0ZSh3aW5mbywgUEFSQUxMRUxfVFJBTlNfU1RBUlRFRCk7CisKKwkvKgorCSAq IFdhaXQgZm9yIHRoZSB0cmFuc2FjdGlvbiBsb2NrIHRvIGJlIHJlbGVhc2VkLiBUaGlzIGlzIHJl cXVpcmVkIHRvCisJICogZGV0ZWN0IGRlYWRsb2NrIGFtb25nIGxlYWRlciBhbmQgcGFyYWxsZWwg YXBwbHkgd29ya2Vycy4gUmVmZXIgdG8gdGhlCisJICogY29tbWVudHMgYXRvcCB0aGlzIGZpbGUu CisJICovCisJcGFfbG9ja190cmFuc2FjdGlvbih3aW5mby0+c2hhcmVkLT54aWQsIEFjY2Vzc1No YXJlTG9jayk7CisJcGFfdW5sb2NrX3RyYW5zYWN0aW9uKHdpbmZvLT5zaGFyZWQtPnhpZCwgQWNj ZXNzU2hhcmVMb2NrKTsKKworCS8qCisJICogQ2hlY2sgaWYgdGhlIHN0YXRlIGJlY29tZXMgUEFS QUxMRUxfVFJBTlNfRklOSVNIRUQgaW4gY2FzZSB0aGUgcGFyYWxsZWwKKwkgKiBhcHBseSB3b3Jr ZXIgZmFpbGVkIHdoaWxlIGFwcGx5aW5nIGNoYW5nZXMgY2F1c2luZyB0aGUgbG9jayB0byBiZQor CSAqIHJlbGVhc2VkLgorCSAqLworCWlmIChwYV9nZXRfeGFjdF9zdGF0ZSh3aW5mby0+c2hhcmVk KSAhPSBQQVJBTExFTF9UUkFOU19GSU5JU0hFRCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJy Y29kZShFUlJDT0RFX09CSkVDVF9OT1RfSU5fUFJFUkVRVUlTSVRFX1NUQVRFKSwKKwkJCQkgZXJy bXNnKCJsb3N0IGNvbm5lY3Rpb24gdG8gdGhlIGxvZ2ljYWwgcmVwbGljYXRpb24gcGFyYWxsZWwg YXBwbHkgd29ya2VyIikpKTsKK30KKworLyoKKyAqIFNldCB0aGUgdHJhbnNhY3Rpb24gc3RhdGUg Zm9yIGEgZ2l2ZW4gcGFyYWxsZWwgYXBwbHkgd29ya2VyLgorICovCit2b2lkCitwYV9zZXRfeGFj dF9zdGF0ZShQYXJhbGxlbEFwcGx5V29ya2VyU2hhcmVkICp3c2hhcmVkLAorCQkJCSAgUGFyYWxs ZWxUcmFuc1N0YXRlIHhhY3Rfc3RhdGUpCit7CisJU3BpbkxvY2tBY3F1aXJlKCZ3c2hhcmVkLT5t dXRleCk7CisJd3NoYXJlZC0+eGFjdF9zdGF0ZSA9IHhhY3Rfc3RhdGU7CisJU3BpbkxvY2tSZWxl YXNlKCZ3c2hhcmVkLT5tdXRleCk7Cit9CisKKy8qCisgKiBHZXQgdGhlIHRyYW5zYWN0aW9uIHN0 YXRlIGZvciBhIGdpdmVuIHBhcmFsbGVsIGFwcGx5IHdvcmtlci4KKyAqLworc3RhdGljIFBhcmFs bGVsVHJhbnNTdGF0ZQorcGFfZ2V0X3hhY3Rfc3RhdGUoUGFyYWxsZWxBcHBseVdvcmtlclNoYXJl ZCAqd3NoYXJlZCkKK3sKKwlQYXJhbGxlbFRyYW5zU3RhdGUgeGFjdF9zdGF0ZTsKKworCVNwaW5M b2NrQWNxdWlyZSgmd3NoYXJlZC0+bXV0ZXgpOworCXhhY3Rfc3RhdGUgPSB3c2hhcmVkLT54YWN0 X3N0YXRlOworCVNwaW5Mb2NrUmVsZWFzZSgmd3NoYXJlZC0+bXV0ZXgpOworCisJcmV0dXJuIHhh Y3Rfc3RhdGU7Cit9CisKKy8qCisgKiBDYWNoZSB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyIGlu Zm9ybWF0aW9uLgorICovCit2b2lkCitwYV9zZXRfc3RyZWFtX2FwcGx5X3dvcmtlcihQYXJhbGxl bEFwcGx5V29ya2VySW5mbyAqd2luZm8pCit7CisJc3RyZWFtX2FwcGx5X3dvcmtlciA9IHdpbmZv OworfQorCisvKgorICogRm9ybSBhIHVuaXF1ZSBzYXZlcG9pbnQgbmFtZSBmb3IgdGhlIHN0cmVh bWluZyB0cmFuc2FjdGlvbi4KKyAqCisgKiBOb3RlIHRoYXQgZGlmZmVyZW50IHN1YnNjcmlwdGlv bnMgZm9yIHB1YmxpY2F0aW9ucyBvbiBkaWZmZXJlbnQgbm9kZXMgY2FuCisgKiByZWNlaXZlIHNh bWUgcmVtb3RlIHhpZCwgc28gd2UgbmVlZCB0byB1c2Ugc3Vic2NyaXB0aW9uIGlkIGFsb25nIHdp dGggaXQuCisgKgorICogUmV0dXJuIHRoZSBuYW1lIGluIHRoZSBzdXBwbGllZCBidWZmZXIuCisg Ki8KK3N0YXRpYyB2b2lkCitwYV9zYXZlcG9pbnRfbmFtZShPaWQgc3Vib2lkLCBUcmFuc2FjdGlv bklkIHhpZCwgY2hhciAqc3BuYW1lLCBTaXplIHN6c3ApCit7CisJc25wcmludGYoc3BuYW1lLCBz enNwLCAicGdfc3BfJXVfJXUiLCBzdWJvaWQsIHhpZCk7Cit9CisKKy8qCisgKiBEZWZpbmUgYSBz YXZlcG9pbnQgZm9yIGEgc3VieGFjdCBpbiBwYXJhbGxlbCBhcHBseSB3b3JrZXIgaWYgbmVlZGVk LgorICoKKyAqIFRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgY2FuIGZpZ3VyZSBvdXQgaWYgYSBu ZXcgc3VidHJhbnNhY3Rpb24gd2FzCisgKiBzdGFydGVkIGJ5IGNoZWNraW5nIGlmIHRoZSBuZXcg Y2hhbmdlIGFycml2ZWQgd2l0aCBhIGRpZmZlcmVudCB4aWQuIEluIHRoYXQKKyAqIGNhc2UgZGVm aW5lIGEgbmFtZWQgc2F2ZXBvaW50LCBzbyB0aGF0IHdlIGFyZSBhYmxlIHRvIHJvbGxiYWNrIHRv IGl0CisgKiBpZiByZXF1aXJlZC4KKyAqLwordm9pZAorcGFfc3RhcnRfc3VidHJhbnMoVHJhbnNh Y3Rpb25JZCBjdXJyZW50X3hpZCwgVHJhbnNhY3Rpb25JZCB0b3BfeGlkKQoreworCWlmIChjdXJy ZW50X3hpZCAhPSB0b3BfeGlkICYmCisJCSFsaXN0X21lbWJlcl94aWQoc3VieGFjdGxpc3QsIGN1 cnJlbnRfeGlkKSkKKwl7CisJCU1lbW9yeUNvbnRleHQgb2xkY3R4OworCQljaGFyCQlzcG5hbWVb TkFNRURBVEFMRU5dOworCisJCXBhX3NhdmVwb2ludF9uYW1lKE15U3Vic2NyaXB0aW9uLT5vaWQs IGN1cnJlbnRfeGlkLAorCQkJCQkJICBzcG5hbWUsIHNpemVvZihzcG5hbWUpKTsKKworCQllbG9n KERFQlVHMSwgImRlZmluaW5nIHNhdmVwb2ludCAlcyBpbiBsb2dpY2FsIHJlcGxpY2F0aW9uIHBh cmFsbGVsIGFwcGx5IHdvcmtlciIsIHNwbmFtZSk7CisKKwkJLyogV2UgbXVzdCBiZSBpbiB0cmFu c2FjdGlvbiBibG9jayB0byBkZWZpbmUgdGhlIFNBVkVQT0lOVC4gKi8KKwkJaWYgKCFJc1RyYW5z YWN0aW9uQmxvY2soKSkKKwkJeworCQkJaWYgKCFJc1RyYW5zYWN0aW9uU3RhdGUoKSkKKwkJCQlT dGFydFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCisJCQlCZWdpblRyYW5zYWN0aW9uQmxvY2soKTsK KwkJCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCQl9CisKKwkJRGVmaW5lU2F2ZXBvaW50 KHNwbmFtZSk7CisKKwkJLyoKKwkJICogQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kIGlzIG5lZWRl ZCB0byBzdGFydCBhIHN1YnRyYW5zYWN0aW9uIGFmdGVyCisJCSAqIGlzc3VpbmcgYSBTQVZFUE9J TlQgaW5zaWRlIGEgdHJhbnNhY3Rpb24gYmxvY2sgKHNlZQorCQkgKiBTdGFydFN1YlRyYW5zYWN0 aW9uKCkpLgorCQkgKi8KKwkJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CisKKwkJb2xkY3R4 ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKFRvcFRyYW5zYWN0aW9uQ29udGV4dCk7CisJCXN1Ynhh Y3RsaXN0ID0gbGFwcGVuZF94aWQoc3VieGFjdGxpc3QsIGN1cnJlbnRfeGlkKTsKKwkJTWVtb3J5 Q29udGV4dFN3aXRjaFRvKG9sZGN0eCk7CisJfQorfQorCisvKiBSZXNldCB0aGUgbGlzdCB0aGF0 IG1haW50YWlucyBzdWJ0cmFuc2FjdGlvbnMuICovCit2b2lkCitwYV9yZXNldF9zdWJ0cmFucyh2 b2lkKQoreworCS8qCisJICogV2UgZG9uJ3QgbmVlZCB0byBmcmVlIHRoaXMgZXhwbGljaXRseSBh cyB0aGUgYWxsb2NhdGVkIG1lbW9yeSB3aWxsIGJlCisJICogZnJlZWQgYXQgdGhlIHRyYW5zYWN0 aW9uIGVuZC4KKwkgKi8KKwlzdWJ4YWN0bGlzdCA9IE5JTDsKK30KKworLyoKKyAqIEhhbmRsZSBT VFJFQU0gQUJPUlQgbWVzc2FnZSB3aGVuIHRoZSB0cmFuc2FjdGlvbiB3YXMgYXBwbGllZCBpbiBh IHBhcmFsbGVsCisgKiBhcHBseSB3b3JrZXIuCisgKi8KK3ZvaWQKK3BhX3N0cmVhbV9hYm9ydChM b2dpY2FsUmVwU3RyZWFtQWJvcnREYXRhICphYm9ydF9kYXRhKQoreworCVRyYW5zYWN0aW9uSWQg eGlkID0gYWJvcnRfZGF0YS0+eGlkOworCVRyYW5zYWN0aW9uSWQgc3VieGlkID0gYWJvcnRfZGF0 YS0+c3VieGlkOworCisJLyoKKwkgKiBVcGRhdGUgb3JpZ2luIHN0YXRlIHNvIHdlIGNhbiByZXN0 YXJ0IHN0cmVhbWluZyBmcm9tIGNvcnJlY3QgcG9zaXRpb24KKwkgKiBpbiBjYXNlIG9mIGNyYXNo LgorCSAqLworCXJlcGxvcmlnaW5fc2Vzc2lvbl9vcmlnaW5fbHNuID0gYWJvcnRfZGF0YS0+YWJv cnRfbHNuOworCXJlcGxvcmlnaW5fc2Vzc2lvbl9vcmlnaW5fdGltZXN0YW1wID0gYWJvcnRfZGF0 YS0+YWJvcnRfdGltZTsKKworCS8qCisJICogSWYgdGhlIHR3byBYSURzIGFyZSB0aGUgc2FtZSwg aXQncyBpbiBmYWN0IGFib3J0IG9mIHRvcGxldmVsIHhhY3QsIHNvCisJICoganVzdCBmcmVlIHRo ZSBzdWJ4YWN0bGlzdC4KKwkgKi8KKwlpZiAoc3VieGlkID09IHhpZCkKKwl7CisJCXBhX3NldF94 YWN0X3N0YXRlKE15UGFyYWxsZWxTaGFyZWQsIFBBUkFMTEVMX1RSQU5TX0ZJTklTSEVEKTsKKwor CQkvKgorCQkgKiBSZWxlYXNlIHRoZSBsb2NrIGFzIHdlIG1pZ2h0IGJlIHByb2Nlc3NpbmcgYW4g ZW1wdHkgc3RyZWFtaW5nCisJCSAqIHRyYW5zYWN0aW9uIGluIHdoaWNoIGNhc2UgdGhlIGxvY2sg d29uJ3QgYmUgcmVsZWFzZWQgZHVyaW5nCisJCSAqIHRyYW5zYWN0aW9uIHJvbGxiYWNrLgorCQkg KgorCQkgKiBOb3RlIHRoYXQgaXQncyBvayB0byByZWxlYXNlIHRoZSB0cmFuc2FjdGlvbiBsb2Nr IGJlZm9yZSBhYm9ydGluZworCQkgKiB0aGUgdHJhbnNhY3Rpb24gYmVjYXVzZSBldmVuIGlmIHRo ZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgZGllcyBkdWUKKwkJICogdG8gY3Jhc2ggb3Igc29tZSBv dGhlciByZWFzb24sIHN1Y2ggYSB0cmFuc2FjdGlvbiB3b3VsZCBzdGlsbCBiZQorCQkgKiBjb25z aWRlcmVkIGFib3J0ZWQgYW55d2F5LgorCQkgKi8KKwkJcGFfdW5sb2NrX3RyYW5zYWN0aW9uKHhp ZCwgQWNjZXNzRXhjbHVzaXZlTG9jayk7CisKKwkJQWJvcnRDdXJyZW50VHJhbnNhY3Rpb24oKTsK KworCQlpZiAoSXNUcmFuc2FjdGlvbkJsb2NrKCkpCisJCXsKKwkJCUVuZFRyYW5zYWN0aW9uQmxv Y2soZmFsc2UpOworCQkJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CisJCX0KKworCQlwYV9y ZXNldF9zdWJ0cmFucygpOworCisJCXBnc3RhdF9yZXBvcnRfYWN0aXZpdHkoU1RBVEVfSURMRSwg TlVMTCk7CisJfQorCWVsc2UKKwl7CisJCS8qIE9LLCBzbyBpdCdzIGEgc3VieGFjdC4gUm9sbGJh Y2sgdG8gdGhlIHNhdmVwb2ludC4gKi8KKwkJaW50CQkJaTsKKwkJY2hhcgkJc3BuYW1lW05BTUVE QVRBTEVOXTsKKworCQlwYV9zYXZlcG9pbnRfbmFtZShNeVN1YnNjcmlwdGlvbi0+b2lkLCBzdWJ4 aWQsIHNwbmFtZSwgc2l6ZW9mKHNwbmFtZSkpOworCisJCWVsb2coREVCVUcxLCAicm9sbGluZyBi YWNrIHRvIHNhdmVwb2ludCAlcyBpbiBsb2dpY2FsIHJlcGxpY2F0aW9uIHBhcmFsbGVsIGFwcGx5 IHdvcmtlciIsIHNwbmFtZSk7CisKKwkJLyoKKwkJICogU2VhcmNoIHRoZSBzdWJ4YWN0bGlzdCwg ZGV0ZXJtaW5lIHRoZSBvZmZzZXQgdHJhY2tlZCBmb3IgdGhlCisJCSAqIHN1YnhhY3QsIGFuZCB0 cnVuY2F0ZSB0aGUgbGlzdC4KKwkJICoKKwkJICogTm90ZSB0aGF0IGZvciBhbiBlbXB0eSBzdWIt dHJhbnNhY3Rpb24gd2Ugd29uJ3QgZmluZCB0aGUgc3VieGlkCisJCSAqIGhlcmUuCisJCSAqLwor CQlmb3IgKGkgPSBsaXN0X2xlbmd0aChzdWJ4YWN0bGlzdCkgLSAxOyBpID49IDA7IGktLSkKKwkJ eworCQkJVHJhbnNhY3Rpb25JZCB4aWRfdG1wID0gbGZpcnN0X3hpZChsaXN0X250aF9jZWxsKHN1 YnhhY3RsaXN0LCBpKSk7CisKKwkJCWlmICh4aWRfdG1wID09IHN1YnhpZCkKKwkJCXsKKwkJCQlS b2xsYmFja1RvU2F2ZXBvaW50KHNwbmFtZSk7CisJCQkJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5k KCk7CisJCQkJc3VieGFjdGxpc3QgPSBsaXN0X3RydW5jYXRlKHN1YnhhY3RsaXN0LCBpKTsKKwkJ CQlicmVhazsKKwkJCX0KKwkJfQorCX0KK30KKworLyoKKyAqIFNldCB0aGUgZmlsZXNldCBzdGF0 ZSBmb3IgYSBwYXJ0aWN1bGFyIHBhcmFsbGVsIGFwcGx5IHdvcmtlci4gVGhlIGZpbGVzZXQKKyAq IHdpbGwgYmUgc2V0IG9uY2UgdGhlIGxlYWRlciB3b3JrZXIgc2VyaWFsaXplZCBhbGwgY2hhbmdl cyB0byB0aGUgZmlsZQorICogc28gdGhhdCBpdCBjYW4gYmUgdXNlZCBieSBwYXJhbGxlbCBhcHBs eSB3b3JrZXIuCisgKi8KK3ZvaWQKK3BhX3NldF9maWxlc2V0X3N0YXRlKFBhcmFsbGVsQXBwbHlX b3JrZXJTaGFyZWQgKndzaGFyZWQsCisJCQkJCSBQYXJ0aWFsRmlsZVNldFN0YXRlIGZpbGVzZXRf c3RhdGUpCit7CisJU3BpbkxvY2tBY3F1aXJlKCZ3c2hhcmVkLT5tdXRleCk7CisJd3NoYXJlZC0+ ZmlsZXNldF9zdGF0ZSA9IGZpbGVzZXRfc3RhdGU7CisKKwlpZiAoZmlsZXNldF9zdGF0ZSA9PSBG U19TRVJJQUxJWkVfRE9ORSkKKwl7CisJCUFzc2VydChhbV9sZWFkZXJfYXBwbHlfd29ya2VyKCkp OworCQlBc3NlcnQoTXlMb2dpY2FsUmVwV29ya2VyLT5zdHJlYW1fZmlsZXNldCk7CisJCXdzaGFy ZWQtPmZpbGVzZXQgPSAqTXlMb2dpY2FsUmVwV29ya2VyLT5zdHJlYW1fZmlsZXNldDsKKwl9CisK KwlTcGluTG9ja1JlbGVhc2UoJndzaGFyZWQtPm11dGV4KTsKK30KKworLyoKKyAqIEdldCB0aGUg ZmlsZXNldCBzdGF0ZSBmb3IgdGhlIGN1cnJlbnQgcGFyYWxsZWwgYXBwbHkgd29ya2VyLgorICov CitzdGF0aWMgUGFydGlhbEZpbGVTZXRTdGF0ZQorcGFfZ2V0X2ZpbGVzZXRfc3RhdGUodm9pZCkK K3sKKwlQYXJ0aWFsRmlsZVNldFN0YXRlIGZpbGVzZXRfc3RhdGU7CisKKwlBc3NlcnQoYW1fcGFy YWxsZWxfYXBwbHlfd29ya2VyKCkpOworCisJU3BpbkxvY2tBY3F1aXJlKCZNeVBhcmFsbGVsU2hh cmVkLT5tdXRleCk7CisJZmlsZXNldF9zdGF0ZSA9IE15UGFyYWxsZWxTaGFyZWQtPmZpbGVzZXRf c3RhdGU7CisJU3BpbkxvY2tSZWxlYXNlKCZNeVBhcmFsbGVsU2hhcmVkLT5tdXRleCk7CisKKwly ZXR1cm4gZmlsZXNldF9zdGF0ZTsKK30KKworLyoKKyAqIEhlbHBlciBmdW5jdGlvbnMgdG8gYWNx dWlyZSBhbmQgcmVsZWFzZSBhIGxvY2sgZm9yIGVhY2ggc3RyZWFtIGJsb2NrLgorICoKKyAqIFNl dCBsb2NrdGFnX2ZpZWxkNCB0byBQQVJBTExFTF9BUFBMWV9MT0NLX1NUUkVBTSB0byBpbmRpY2F0 ZSB0aGF0IGl0J3MgYQorICogc3RyZWFtIGxvY2suCisgKgorICogUmVmZXIgdG8gdGhlIGNvbW1l bnRzIGF0b3AgdGhpcyBmaWxlIHRvIHNlZSBob3cgdGhlIHN0cmVhbSBsb2NrIGlzIHVzZWQuCisg Ki8KK3ZvaWQKK3BhX2xvY2tfc3RyZWFtKFRyYW5zYWN0aW9uSWQgeGlkLCBMT0NLTU9ERSBsb2Nr bW9kZSkKK3sKKwlMb2NrQXBwbHlUcmFuc2FjdGlvbkZvclNlc3Npb24oTXlMb2dpY2FsUmVwV29y a2VyLT5zdWJpZCwgeGlkLAorCQkJCQkJCQkgICBQQVJBTExFTF9BUFBMWV9MT0NLX1NUUkVBTSwg bG9ja21vZGUpOworfQorCit2b2lkCitwYV91bmxvY2tfc3RyZWFtKFRyYW5zYWN0aW9uSWQgeGlk LCBMT0NLTU9ERSBsb2NrbW9kZSkKK3sKKwlVbmxvY2tBcHBseVRyYW5zYWN0aW9uRm9yU2Vzc2lv bihNeUxvZ2ljYWxSZXBXb3JrZXItPnN1YmlkLCB4aWQsCisJCQkJCQkJCQkgUEFSQUxMRUxfQVBQ TFlfTE9DS19TVFJFQU0sIGxvY2ttb2RlKTsKK30KKworLyoKKyAqIEhlbHBlciBmdW5jdGlvbnMg dG8gYWNxdWlyZSBhbmQgcmVsZWFzZSBhIGxvY2sgZm9yIGVhY2ggbG9jYWwgdHJhbnNhY3Rpb24K KyAqIGFwcGx5LgorICoKKyAqIFNldCBsb2NrdGFnX2ZpZWxkNCB0byBQQVJBTExFTF9BUFBMWV9M T0NLX1hBQ1QgdG8gaW5kaWNhdGUgdGhhdCBpdCdzIGEKKyAqIHRyYW5zYWN0aW9uIGxvY2suCisg KgorICogTm90ZSB0aGF0IGFsbCB0aGUgY2FsbGVycyBtdXN0IHBhc3MgYSByZW1vdGUgdHJhbnNh Y3Rpb24gSUQgaW5zdGVhZCBvZiBhCisgKiBsb2NhbCB0cmFuc2FjdGlvbiBJRCBhcyB4aWQuIFRo aXMgaXMgYmVjYXVzZSB0aGUgbG9jYWwgdHJhbnNhY3Rpb24gSUQgd2lsbAorICogb25seSBiZSBh c3NpZ25lZCB3aGlsZSBhcHBseWluZyB0aGUgZmlyc3QgY2hhbmdlIGluIHRoZSBwYXJhbGxlbCBh cHBseSBidXQKKyAqIGl0J3MgcG9zc2libGUgdGhhdCB0aGUgZmlyc3QgY2hhbmdlIGluIHRoZSBw YXJhbGxlbCBhcHBseSB3b3JrZXIgaXMgYmxvY2tlZAorICogYnkgYSBjb25jdXJyZW50bHkgZXhl Y3V0aW5nIHRyYW5zYWN0aW9uIGluIGFub3RoZXIgcGFyYWxsZWwgYXBwbHkgd29ya2VyLiBXZQor ICogY2FuIG9ubHkgY29tbXVuaWNhdGUgdGhlIGxvY2FsIHRyYW5zYWN0aW9uIGlkIHRvIHRoZSBs ZWFkZXIgYWZ0ZXIgYXBwbHlpbmcKKyAqIHRoZSBmaXJzdCBjaGFuZ2Ugc28gaXQgd29uJ3QgYmUg YWJsZSB0byB3YWl0IGFmdGVyIHNlbmRpbmcgdGhlIHhhY3QgZmluaXNoCisgKiBjb21tYW5kIHVz aW5nIHRoaXMgbG9jay4KKyAqCisgKiBSZWZlciB0byB0aGUgY29tbWVudHMgYXRvcCB0aGlzIGZp bGUgdG8gc2VlIGhvdyB0aGUgdHJhbnNhY3Rpb24gbG9jayBpcworICogdXNlZC4KKyAqLwordm9p ZAorcGFfbG9ja190cmFuc2FjdGlvbihUcmFuc2FjdGlvbklkIHhpZCwgTE9DS01PREUgbG9ja21v ZGUpCit7CisJTG9ja0FwcGx5VHJhbnNhY3Rpb25Gb3JTZXNzaW9uKE15TG9naWNhbFJlcFdvcmtl ci0+c3ViaWQsIHhpZCwKKwkJCQkJCQkJICAgUEFSQUxMRUxfQVBQTFlfTE9DS19YQUNULCBsb2Nr bW9kZSk7Cit9CisKK3ZvaWQKK3BhX3VubG9ja190cmFuc2FjdGlvbihUcmFuc2FjdGlvbklkIHhp ZCwgTE9DS01PREUgbG9ja21vZGUpCit7CisJVW5sb2NrQXBwbHlUcmFuc2FjdGlvbkZvclNlc3Np b24oTXlMb2dpY2FsUmVwV29ya2VyLT5zdWJpZCwgeGlkLAorCQkJCQkJCQkJIFBBUkFMTEVMX0FQ UExZX0xPQ0tfWEFDVCwgbG9ja21vZGUpOworfQorCisvKgorICogRGVjcmVtZW50IHRoZSBudW1i ZXIgb2YgcGVuZGluZyBzdHJlYW1pbmcgYmxvY2tzIGFuZCB3YWl0IG9uIHRoZSBzdHJlYW0gbG9j aworICogaWYgdGhlcmUgaXMgbm8gcGVuZGluZyBibG9jayBhdmFpbGFibGUuCisgKi8KK3ZvaWQK K3BhX2RlY3JfYW5kX3dhaXRfc3RyZWFtX2Jsb2NrKHZvaWQpCit7CisJQXNzZXJ0KGFtX3BhcmFs bGVsX2FwcGx5X3dvcmtlcigpKTsKKworCS8qCisJICogSXQgaXMgb25seSBwb3NzaWJsZSB0byBu b3QgaGF2ZSBhbnkgcGVuZGluZyBzdHJlYW0gY2h1bmtzIHdoZW4gd2UgYXJlCisJICogYXBwbHlp bmcgc3Bvb2xlZCBtZXNzYWdlcy4KKwkgKi8KKwlpZiAocGdfYXRvbWljX3JlYWRfdTMyKCZNeVBh cmFsbGVsU2hhcmVkLT5wZW5kaW5nX3N0cmVhbV9jb3VudCkgPT0gMCkKKwl7CisJCWlmIChwYV9o YXNfc3Bvb2xlZF9tZXNzYWdlX3BlbmRpbmcoKSkKKwkJCXJldHVybjsKKworCQllbG9nKEVSUk9S LCAiaW52YWxpZCBwZW5kaW5nIHN0cmVhbWluZyBjaHVuayAwIik7CisJfQorCisJaWYgKHBnX2F0 b21pY19zdWJfZmV0Y2hfdTMyKCZNeVBhcmFsbGVsU2hhcmVkLT5wZW5kaW5nX3N0cmVhbV9jb3Vu dCwgMSkgPT0gMCkKKwl7CisJCXBhX2xvY2tfc3RyZWFtKE15UGFyYWxsZWxTaGFyZWQtPnhpZCwg QWNjZXNzU2hhcmVMb2NrKTsKKwkJcGFfdW5sb2NrX3N0cmVhbShNeVBhcmFsbGVsU2hhcmVkLT54 aWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJfQorfQorCisvKgorICogRmluaXNoIHByb2Nlc3Npbmcg dGhlIHN0cmVhbWluZyB0cmFuc2FjdGlvbiBpbiB0aGUgbGVhZGVyIGFwcGx5IHdvcmtlci4KKyAq Lwordm9pZAorcGFfeGFjdF9maW5pc2goUGFyYWxsZWxBcHBseVdvcmtlckluZm8gKndpbmZvLCBY TG9nUmVjUHRyIHJlbW90ZV9sc24pCit7CisJQXNzZXJ0KGFtX2xlYWRlcl9hcHBseV93b3JrZXIo KSk7CisKKwkvKgorCSAqIFVubG9jayB0aGUgc2hhcmVkIG9iamVjdCBsb2NrIHNvIHRoYXQgcGFy YWxsZWwgYXBwbHkgd29ya2VyIGNhbgorCSAqIGNvbnRpbnVlIHRvIHJlY2VpdmUgYW5kIGFwcGx5 IGNoYW5nZXMuCisJICovCisJcGFfdW5sb2NrX3N0cmVhbSh3aW5mby0+c2hhcmVkLT54aWQsIEFj Y2Vzc0V4Y2x1c2l2ZUxvY2spOworCisJLyoKKwkgKiBXYWl0IGZvciB0aGF0IHdvcmtlciB0byBm aW5pc2guIFRoaXMgaXMgbmVjZXNzYXJ5IHRvIG1haW50YWluIGNvbW1pdAorCSAqIG9yZGVyIHdo aWNoIGF2b2lkcyBmYWlsdXJlcyBkdWUgdG8gdHJhbnNhY3Rpb24gZGVwZW5kZW5jaWVzIGFuZAor CSAqIGRlYWRsb2Nrcy4KKwkgKi8KKwlwYV93YWl0X2Zvcl94YWN0X2ZpbmlzaCh3aW5mbyk7CisK KwlpZiAoIVhMb2dSZWNQdHJJc0ludmFsaWQocmVtb3RlX2xzbikpCisJCXN0b3JlX2ZsdXNoX3Bv c2l0aW9uKHJlbW90ZV9sc24sIHdpbmZvLT5zaGFyZWQtPmxhc3RfY29tbWl0X2VuZCk7CisKKwlw YV9mcmVlX3dvcmtlcih3aW5mbyk7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNh dGlvbi9sb2dpY2FsL2RlY29kZS5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9k ZWNvZGUuYwppbmRleCBjM2JjOGVjYzkyLi5hNTNlMjNjNjc5IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RlY29kZS5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxp Y2F0aW9uL2xvZ2ljYWwvZGVjb2RlLmMKQEAgLTgyMiwxMCArODIyLDExIEBAIERlY29kZUFib3J0 KExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgWExvZ1JlY29yZEJ1ZmZlciAqYnVmLAogCQlm b3IgKGkgPSAwOyBpIDwgcGFyc2VkLT5uc3VieGFjdHM7IGkrKykKIAkJewogCQkJUmVvcmRlckJ1 ZmZlckFib3J0KGN0eC0+cmVvcmRlciwgcGFyc2VkLT5zdWJ4YWN0c1tpXSwKLQkJCQkJCQkgICBi dWYtPnJlY29yZC0+RW5kUmVjUHRyKTsKKwkJCQkJCQkgICBidWYtPnJlY29yZC0+RW5kUmVjUHRy LCBhYm9ydF90aW1lKTsKIAkJfQogCi0JCVJlb3JkZXJCdWZmZXJBYm9ydChjdHgtPnJlb3JkZXIs IHhpZCwgYnVmLT5yZWNvcmQtPkVuZFJlY1B0cik7CisJCVJlb3JkZXJCdWZmZXJBYm9ydChjdHgt PnJlb3JkZXIsIHhpZCwgYnVmLT5yZWNvcmQtPkVuZFJlY1B0ciwKKwkJCQkJCSAgIGFib3J0X3Rp bWUpOwogCX0KIAogCS8qIHVwZGF0ZSB0aGUgZGVjb2Rpbmcgc3RhdHMgKi8KZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbGF1bmNoZXIuYyBiL3NyYy9iYWNrZW5k L3JlcGxpY2F0aW9uL2xvZ2ljYWwvbGF1bmNoZXIuYwppbmRleCBhNjllMzcxYzA1Li5hZmI3YWNk ZGFhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xhdW5jaGVy LmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9sYXVuY2hlci5jCkBAIC01 NSw2ICs1NSw3IEBACiAvKiBHVUMgdmFyaWFibGVzICovCiBpbnQJCQltYXhfbG9naWNhbF9yZXBs aWNhdGlvbl93b3JrZXJzID0gNDsKIGludAkJCW1heF9zeW5jX3dvcmtlcnNfcGVyX3N1YnNjcmlw dGlvbiA9IDI7CitpbnQJCQltYXhfcGFyYWxsZWxfYXBwbHlfd29ya2Vyc19wZXJfc3Vic2NyaXB0 aW9uID0gMjsKIAogTG9naWNhbFJlcFdvcmtlciAqTXlMb2dpY2FsUmVwV29ya2VyID0gTlVMTDsK IApAQCAtNzQsNiArNzUsNyBAQCBzdGF0aWMgdm9pZCBsb2dpY2FscmVwX2xhdW5jaGVyX29uZXhp dChpbnQgY29kZSwgRGF0dW0gYXJnKTsKIHN0YXRpYyB2b2lkIGxvZ2ljYWxyZXBfd29ya2VyX29u ZXhpdChpbnQgY29kZSwgRGF0dW0gYXJnKTsKIHN0YXRpYyB2b2lkIGxvZ2ljYWxyZXBfd29ya2Vy X2RldGFjaCh2b2lkKTsKIHN0YXRpYyB2b2lkIGxvZ2ljYWxyZXBfd29ya2VyX2NsZWFudXAoTG9n aWNhbFJlcFdvcmtlciAqd29ya2VyKTsKK3N0YXRpYyBpbnQJbG9naWNhbHJlcF9wYV93b3JrZXJf Y291bnQoT2lkIHN1YmlkKTsKIAogc3RhdGljIGJvb2wgb25fY29tbWl0X2xhdW5jaGVyX3dha2V1 cCA9IGZhbHNlOwogCkBAIC0xNTIsOCArMTU0LDEwIEBAIGdldF9zdWJzY3JpcHRpb25fbGlzdCh2 b2lkKQogICoKICAqIFRoaXMgaXMgb25seSBuZWVkZWQgZm9yIGNsZWFuaW5nIHVwIHRoZSBzaGFy ZWQgbWVtb3J5IGluIGNhc2UgdGhlIHdvcmtlcgogICogZmFpbHMgdG8gYXR0YWNoLgorICoKKyAq IFJldHVybnMgd2hldGhlciB0aGUgYXR0YWNoIHdhcyBzdWNjZXNzZnVsLgogICovCi1zdGF0aWMg dm9pZAorc3RhdGljIGJvb2wKIFdhaXRGb3JSZXBsaWNhdGlvbldvcmtlckF0dGFjaChMb2dpY2Fs UmVwV29ya2VyICp3b3JrZXIsCiAJCQkJCQkJICAgdWludDE2IGdlbmVyYXRpb24sCiAJCQkJCQkJ ICAgQmFja2dyb3VuZFdvcmtlckhhbmRsZSAqaGFuZGxlKQpAQCAtMTY5LDExICsxNzMsMTEgQEAg V2FpdEZvclJlcGxpY2F0aW9uV29ya2VyQXR0YWNoKExvZ2ljYWxSZXBXb3JrZXIgKndvcmtlciwK IAogCQlMV0xvY2tBY3F1aXJlKExvZ2ljYWxSZXBXb3JrZXJMb2NrLCBMV19TSEFSRUQpOwogCi0J CS8qIFdvcmtlciBlaXRoZXIgZGllZCBvciBoYXMgc3RhcnRlZDsgbm8gbmVlZCB0byBkbyBhbnl0 aGluZy4gKi8KKwkJLyogV29ya2VyIGVpdGhlciBkaWVkIG9yIGhhcyBzdGFydGVkLiBSZXR1cm4g ZmFsc2UgaWYgZGllZC4gKi8KIAkJaWYgKCF3b3JrZXItPmluX3VzZSB8fCB3b3JrZXItPnByb2Mp CiAJCXsKIAkJCUxXTG9ja1JlbGVhc2UoTG9naWNhbFJlcFdvcmtlckxvY2spOwotCQkJcmV0dXJu OworCQkJcmV0dXJuIHdvcmtlci0+aW5fdXNlOwogCQl9CiAKIAkJTFdMb2NrUmVsZWFzZShMb2dp Y2FsUmVwV29ya2VyTG9jayk7CkBAIC0xODgsNyArMTkyLDcgQEAgV2FpdEZvclJlcGxpY2F0aW9u V29ya2VyQXR0YWNoKExvZ2ljYWxSZXBXb3JrZXIgKndvcmtlciwKIAkJCWlmIChnZW5lcmF0aW9u ID09IHdvcmtlci0+Z2VuZXJhdGlvbikKIAkJCQlsb2dpY2FscmVwX3dvcmtlcl9jbGVhbnVwKHdv cmtlcik7CiAJCQlMV0xvY2tSZWxlYXNlKExvZ2ljYWxSZXBXb3JrZXJMb2NrKTsKLQkJCXJldHVy bjsKKwkJCXJldHVybiBmYWxzZTsKIAkJfQogCiAJCS8qCkBAIC0yMTAsNiArMjE0LDggQEAgV2Fp dEZvclJlcGxpY2F0aW9uV29ya2VyQXR0YWNoKExvZ2ljYWxSZXBXb3JrZXIgKndvcmtlciwKIC8q CiAgKiBXYWxrcyB0aGUgd29ya2VycyBhcnJheSBhbmQgc2VhcmNoZXMgZm9yIG9uZSB0aGF0IG1h dGNoZXMgZ2l2ZW4KICAqIHN1YnNjcmlwdGlvbiBpZCBhbmQgcmVsaWQuCisgKgorICogV2UgYXJl IG9ubHkgaW50ZXJlc3RlZCBpbiB0aGUgbGVhZGVyIGFwcGx5IHdvcmtlciBvciB0YWJsZSBzeW5j IHdvcmtlci4KICAqLwogTG9naWNhbFJlcFdvcmtlciAqCiBsb2dpY2FscmVwX3dvcmtlcl9maW5k KE9pZCBzdWJpZCwgT2lkIHJlbGlkLCBib29sIG9ubHlfcnVubmluZykKQEAgLTIyNCw2ICsyMzAs MTAgQEAgbG9naWNhbHJlcF93b3JrZXJfZmluZChPaWQgc3ViaWQsIE9pZCByZWxpZCwgYm9vbCBv bmx5X3J1bm5pbmcpCiAJewogCQlMb2dpY2FsUmVwV29ya2VyICp3ID0gJkxvZ2ljYWxSZXBDdHgt PndvcmtlcnNbaV07CiAKKwkJLyogU2tpcCBwYXJhbGxlbCBhcHBseSB3b3JrZXJzLiAqLworCQlp ZiAoaXNQYXJhbGxlbEFwcGx5V29ya2VyKHcpKQorCQkJY29udGludWU7CisKIAkJaWYgKHctPmlu X3VzZSAmJiB3LT5zdWJpZCA9PSBzdWJpZCAmJiB3LT5yZWxpZCA9PSByZWxpZCAmJgogCQkJKCFv bmx5X3J1bm5pbmcgfHwgdy0+cHJvYykpCiAJCXsKQEAgLTI2MCwxMSArMjcwLDEzIEBAIGxvZ2lj YWxyZXBfd29ya2Vyc19maW5kKE9pZCBzdWJpZCwgYm9vbCBvbmx5X3J1bm5pbmcpCiB9CiAKIC8q Ci0gKiBTdGFydCBuZXcgYXBwbHkgYmFja2dyb3VuZCB3b3JrZXIsIGlmIHBvc3NpYmxlLgorICog U3RhcnQgbmV3IGxvZ2ljYWwgcmVwbGljYXRpb24gYmFja2dyb3VuZCB3b3JrZXIsIGlmIHBvc3Np YmxlLgorICoKKyAqIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBvbiBmYWlsdXJlLgog ICovCi12b2lkCitib29sCiBsb2dpY2FscmVwX3dvcmtlcl9sYXVuY2goT2lkIGRiaWQsIE9pZCBz dWJpZCwgY29uc3QgY2hhciAqc3VibmFtZSwgT2lkIHVzZXJpZCwKLQkJCQkJCSBPaWQgcmVsaWQp CisJCQkJCQkgT2lkIHJlbGlkLCBkc21faGFuZGxlIHN1Yndvcmtlcl9kc20pCiB7CiAJQmFja2dy b3VuZFdvcmtlciBiZ3c7CiAJQmFja2dyb3VuZFdvcmtlckhhbmRsZSAqYmd3X2hhbmRsZTsKQEAg LTI3Myw3ICsyODUsMTIgQEAgbG9naWNhbHJlcF93b3JrZXJfbGF1bmNoKE9pZCBkYmlkLCBPaWQg c3ViaWQsIGNvbnN0IGNoYXIgKnN1Ym5hbWUsIE9pZCB1c2VyaWQsCiAJaW50CQkJc2xvdCA9IDA7 CiAJTG9naWNhbFJlcFdvcmtlciAqd29ya2VyID0gTlVMTDsKIAlpbnQJCQluc3luY3dvcmtlcnM7 CisJaW50CQkJbnBhcmFsbGVsYXBwbHl3b3JrZXJzOwogCVRpbWVzdGFtcFR6IG5vdzsKKwlib29s CQlpc19wYXJhbGxlbF9hcHBseV93b3JrZXIgPSAoc3Vid29ya2VyX2RzbSAhPSBEU01fSEFORExF X0lOVkFMSUQpOworCisJLyogU2FuaXR5IGNoZWNrIC0gdGFibGVzeW5jIHdvcmtlciBjYW5ub3Qg YmUgYSBzdWJ3b3JrZXIgKi8KKwlBc3NlcnQoIShpc19wYXJhbGxlbF9hcHBseV93b3JrZXIgJiYg T2lkSXNWYWxpZChyZWxpZCkpKTsKIAogCWVyZXBvcnQoREVCVUcxLAogCQkJKGVycm1zZ19pbnRl cm5hbCgic3RhcnRpbmcgbG9naWNhbCByZXBsaWNhdGlvbiB3b3JrZXIgZm9yIHN1YnNjcmlwdGlv biBcIiVzXCIiLApAQCAtMzUxLDcgKzM2OCwyMCBAQCByZXRyeToKIAlpZiAoT2lkSXNWYWxpZChy ZWxpZCkgJiYgbnN5bmN3b3JrZXJzID49IG1heF9zeW5jX3dvcmtlcnNfcGVyX3N1YnNjcmlwdGlv bikKIAl7CiAJCUxXTG9ja1JlbGVhc2UoTG9naWNhbFJlcFdvcmtlckxvY2spOwotCQlyZXR1cm47 CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlucGFyYWxsZWxhcHBseXdvcmtlcnMgPSBsb2dpY2Fs cmVwX3BhX3dvcmtlcl9jb3VudChzdWJpZCk7CisKKwkvKgorCSAqIFJldHVybiBmYWxzZSBpZiB0 aGUgbnVtYmVyIG9mIHBhcmFsbGVsIGFwcGx5IHdvcmtlcnMgcmVhY2hlZCB0aGUgbGltaXQKKwkg KiBwZXIgc3Vic2NyaXB0aW9uLgorCSAqLworCWlmIChpc19wYXJhbGxlbF9hcHBseV93b3JrZXIg JiYKKwkJbnBhcmFsbGVsYXBwbHl3b3JrZXJzID49IG1heF9wYXJhbGxlbF9hcHBseV93b3JrZXJz X3Blcl9zdWJzY3JpcHRpb24pCisJeworCQlMV0xvY2tSZWxlYXNlKExvZ2ljYWxSZXBXb3JrZXJM b2NrKTsKKwkJcmV0dXJuIGZhbHNlOwogCX0KIAogCS8qCkBAIC0zNjUsNyArMzk1LDcgQEAgcmV0 cnk6CiAJCQkJKGVycmNvZGUoRVJSQ09ERV9DT05GSUdVUkFUSU9OX0xJTUlUX0VYQ0VFREVEKSwK IAkJCQkgZXJybXNnKCJvdXQgb2YgbG9naWNhbCByZXBsaWNhdGlvbiB3b3JrZXIgc2xvdHMiKSwK IAkJCQkgZXJyaGludCgiWW91IG1pZ2h0IG5lZWQgdG8gaW5jcmVhc2UgbWF4X2xvZ2ljYWxfcmVw bGljYXRpb25fd29ya2Vycy4iKSkpOwotCQlyZXR1cm47CisJCXJldHVybiBmYWxzZTsKIAl9CiAK IAkvKiBQcmVwYXJlIHRoZSB3b3JrZXIgc2xvdC4gKi8KQEAgLTM4MCw2ICs0MTAsOCBAQCByZXRy eToKIAl3b3JrZXItPnJlbHN0YXRlID0gU1VCUkVMX1NUQVRFX1VOS05PV047CiAJd29ya2VyLT5y ZWxzdGF0ZV9sc24gPSBJbnZhbGlkWExvZ1JlY1B0cjsKIAl3b3JrZXItPnN0cmVhbV9maWxlc2V0 ID0gTlVMTDsKKwl3b3JrZXItPmFwcGx5X2xlYWRlcl9waWQgPSBpc19wYXJhbGxlbF9hcHBseV93 b3JrZXIgPyBNeVByb2NQaWQgOiBJbnZhbGlkUGlkOworCXdvcmtlci0+cGFyYWxsZWxfYXBwbHkg PSBpc19wYXJhbGxlbF9hcHBseV93b3JrZXI7CiAJd29ya2VyLT5sYXN0X2xzbiA9IEludmFsaWRY TG9nUmVjUHRyOwogCVRJTUVTVEFNUF9OT0JFR0lOKHdvcmtlci0+bGFzdF9zZW5kX3RpbWUpOwog CVRJTUVTVEFNUF9OT0JFR0lOKHdvcmtlci0+bGFzdF9yZWN2X3RpbWUpOwpAQCAtMzk3LDE5ICs0 MjksMzQgQEAgcmV0cnk6CiAJCUJHV09SS0VSX0JBQ0tFTkRfREFUQUJBU0VfQ09OTkVDVElPTjsK IAliZ3cuYmd3X3N0YXJ0X3RpbWUgPSBCZ1dvcmtlclN0YXJ0X1JlY292ZXJ5RmluaXNoZWQ7CiAJ c25wcmludGYoYmd3LmJnd19saWJyYXJ5X25hbWUsIEJHV19NQVhMRU4sICJwb3N0Z3JlcyIpOwot CXNucHJpbnRmKGJndy5iZ3dfZnVuY3Rpb25fbmFtZSwgQkdXX01BWExFTiwgIkFwcGx5V29ya2Vy TWFpbiIpOworCisJaWYgKGlzX3BhcmFsbGVsX2FwcGx5X3dvcmtlcikKKwkJc25wcmludGYoYmd3 LmJnd19mdW5jdGlvbl9uYW1lLCBCR1dfTUFYTEVOLCAiUGFyYWxsZWxBcHBseVdvcmtlck1haW4i KTsKKwllbHNlCisJCXNucHJpbnRmKGJndy5iZ3dfZnVuY3Rpb25fbmFtZSwgQkdXX01BWExFTiwg IkFwcGx5V29ya2VyTWFpbiIpOworCiAJaWYgKE9pZElzVmFsaWQocmVsaWQpKQogCQlzbnByaW50 ZihiZ3cuYmd3X25hbWUsIEJHV19NQVhMRU4sCiAJCQkJICJsb2dpY2FsIHJlcGxpY2F0aW9uIHdv cmtlciBmb3Igc3Vic2NyaXB0aW9uICV1IHN5bmMgJXUiLCBzdWJpZCwgcmVsaWQpOworCWVsc2Ug aWYgKGlzX3BhcmFsbGVsX2FwcGx5X3dvcmtlcikKKwkJc25wcmludGYoYmd3LmJnd19uYW1lLCBC R1dfTUFYTEVOLAorCQkJCSAibG9naWNhbCByZXBsaWNhdGlvbiBwYXJhbGxlbCBhcHBseSB3b3Jr ZXIgZm9yIHN1YnNjcmlwdGlvbiAldSIsIHN1YmlkKTsKIAllbHNlCiAJCXNucHJpbnRmKGJndy5i Z3dfbmFtZSwgQkdXX01BWExFTiwKLQkJCQkgImxvZ2ljYWwgcmVwbGljYXRpb24gd29ya2VyIGZv ciBzdWJzY3JpcHRpb24gJXUiLCBzdWJpZCk7Ci0Jc25wcmludGYoYmd3LmJnd190eXBlLCBCR1df TUFYTEVOLCAibG9naWNhbCByZXBsaWNhdGlvbiB3b3JrZXIiKTsKKwkJCQkgImxvZ2ljYWwgcmVw bGljYXRpb24gYXBwbHkgd29ya2VyIGZvciBzdWJzY3JpcHRpb24gJXUiLCBzdWJpZCk7CisKKwlp ZiAoaXNfcGFyYWxsZWxfYXBwbHlfd29ya2VyKQorCQlzbnByaW50ZihiZ3cuYmd3X3R5cGUsIEJH V19NQVhMRU4sICJsb2dpY2FsIHJlcGxpY2F0aW9uIHBhcmFsbGVsIHdvcmtlciIpOworCWVsc2UK KwkJc25wcmludGYoYmd3LmJnd190eXBlLCBCR1dfTUFYTEVOLCAibG9naWNhbCByZXBsaWNhdGlv biB3b3JrZXIiKTsKIAogCWJndy5iZ3dfcmVzdGFydF90aW1lID0gQkdXX05FVkVSX1JFU1RBUlQ7 CiAJYmd3LmJnd19ub3RpZnlfcGlkID0gTXlQcm9jUGlkOwogCWJndy5iZ3dfbWFpbl9hcmcgPSBJ bnQzMkdldERhdHVtKHNsb3QpOwogCisJaWYgKGlzX3BhcmFsbGVsX2FwcGx5X3dvcmtlcikKKwkJ bWVtY3B5KGJndy5iZ3dfZXh0cmEsICZzdWJ3b3JrZXJfZHNtLCBzaXplb2YoZHNtX2hhbmRsZSkp OworCiAJaWYgKCFSZWdpc3RlckR5bmFtaWNCYWNrZ3JvdW5kV29ya2VyKCZiZ3csICZiZ3dfaGFu ZGxlKSkKIAl7CiAJCS8qIEZhaWxlZCB0byBzdGFydCB3b3JrZXIsIHNvIGNsZWFuIHVwIHRoZSB3 b3JrZXIgc2xvdC4gKi8KQEAgLTQyMiwzMyArNDY5LDIzIEBAIHJldHJ5OgogCQkJCShlcnJjb2Rl KEVSUkNPREVfQ09ORklHVVJBVElPTl9MSU1JVF9FWENFRURFRCksCiAJCQkJIGVycm1zZygib3V0 IG9mIGJhY2tncm91bmQgd29ya2VyIHNsb3RzIiksCiAJCQkJIGVycmhpbnQoIllvdSBtaWdodCBu ZWVkIHRvIGluY3JlYXNlIG1heF93b3JrZXJfcHJvY2Vzc2VzLiIpKSk7Ci0JCXJldHVybjsKKwkJ cmV0dXJuIGZhbHNlOwogCX0KIAogCS8qIE5vdyB3YWl0IHVudGlsIGl0IGF0dGFjaGVzLiAqLwot CVdhaXRGb3JSZXBsaWNhdGlvbldvcmtlckF0dGFjaCh3b3JrZXIsIGdlbmVyYXRpb24sIGJnd19o YW5kbGUpOworCXJldHVybiBXYWl0Rm9yUmVwbGljYXRpb25Xb3JrZXJBdHRhY2god29ya2VyLCBn ZW5lcmF0aW9uLCBiZ3dfaGFuZGxlKTsKIH0KIAogLyoKLSAqIFN0b3AgdGhlIGxvZ2ljYWwgcmVw bGljYXRpb24gd29ya2VyIGZvciBzdWJpZC9yZWxpZCwgaWYgYW55LCBhbmQgd2FpdCB1bnRpbAot ICogaXQgZGV0YWNoZXMgZnJvbSB0aGUgc2xvdC4KKyAqIEludGVybmFsIGZ1bmN0aW9uIHRvIHN0 b3AgdGhlIHdvcmtlciBhbmQgd2FpdCB1bnRpbCBpdCBkZXRhY2hlcyBmcm9tIHRoZQorICogc2xv dC4KICAqLwotdm9pZAotbG9naWNhbHJlcF93b3JrZXJfc3RvcChPaWQgc3ViaWQsIE9pZCByZWxp ZCkKK3N0YXRpYyB2b2lkCitsb2dpY2FscmVwX3dvcmtlcl9zdG9wX2ludGVybmFsKExvZ2ljYWxS ZXBXb3JrZXIgKndvcmtlciwgaW50IHNpZ25vKQogewotCUxvZ2ljYWxSZXBXb3JrZXIgKndvcmtl cjsKIAl1aW50MTYJCWdlbmVyYXRpb247CiAKLQlMV0xvY2tBY3F1aXJlKExvZ2ljYWxSZXBXb3Jr ZXJMb2NrLCBMV19TSEFSRUQpOwotCi0Jd29ya2VyID0gbG9naWNhbHJlcF93b3JrZXJfZmluZChz dWJpZCwgcmVsaWQsIGZhbHNlKTsKLQotCS8qIE5vIHdvcmtlciwgbm90aGluZyB0byBkby4gKi8K LQlpZiAoIXdvcmtlcikKLQl7Ci0JCUxXTG9ja1JlbGVhc2UoTG9naWNhbFJlcFdvcmtlckxvY2sp OwotCQlyZXR1cm47Ci0JfQorCUFzc2VydChMV0xvY2tIZWxkQnlNZUluTW9kZShMb2dpY2FsUmVw V29ya2VyTG9jaywgTFdfU0hBUkVEKSk7CiAKIAkvKgogCSAqIFJlbWVtYmVyIHdoaWNoIGdlbmVy YXRpb24gd2FzIG91ciB3b3JrZXIgc28gd2UgY2FuIGNoZWNrIGlmIHdoYXQgd2Ugc2VlCkBAIC00 ODYsMTAgKzUyMyw3IEBAIGxvZ2ljYWxyZXBfd29ya2VyX3N0b3AoT2lkIHN1YmlkLCBPaWQgcmVs aWQpCiAJCSAqIGRpZmZlcmVudCwgbWVhbmluZyB0aGF0IGEgZGlmZmVyZW50IHdvcmtlciBoYXMg dGFrZW4gdGhlIHNsb3QuCiAJCSAqLwogCQlpZiAoIXdvcmtlci0+aW5fdXNlIHx8IHdvcmtlci0+ Z2VuZXJhdGlvbiAhPSBnZW5lcmF0aW9uKQotCQl7Ci0JCQlMV0xvY2tSZWxlYXNlKExvZ2ljYWxS ZXBXb3JrZXJMb2NrKTsKIAkJCXJldHVybjsKLQkJfQogCiAJCS8qIFdvcmtlciBoYXMgYXNzaWdu ZWQgcHJvYywgc28gaXQgaGFzIHN0YXJ0ZWQuICovCiAJCWlmICh3b3JrZXItPnByb2MpCkBAIC00 OTcsNyArNTMxLDcgQEAgbG9naWNhbHJlcF93b3JrZXJfc3RvcChPaWQgc3ViaWQsIE9pZCByZWxp ZCkKIAl9CiAKIAkvKiBOb3cgdGVybWluYXRlIHRoZSB3b3JrZXIgLi4uICovCi0Ja2lsbCh3b3Jr ZXItPnByb2MtPnBpZCwgU0lHVEVSTSk7CisJa2lsbCh3b3JrZXItPnByb2MtPnBpZCwgc2lnbm8p OwogCiAJLyogLi4uIGFuZCB3YWl0IGZvciBpdCB0byBkaWUuICovCiAJZm9yICg7OykKQEAgLTUy Myw2ICs1NTcsNTMgQEAgbG9naWNhbHJlcF93b3JrZXJfc3RvcChPaWQgc3ViaWQsIE9pZCByZWxp ZCkKIAogCQlMV0xvY2tBY3F1aXJlKExvZ2ljYWxSZXBXb3JrZXJMb2NrLCBMV19TSEFSRUQpOwog CX0KK30KKworLyoKKyAqIFN0b3AgdGhlIGxvZ2ljYWwgcmVwbGljYXRpb24gd29ya2VyIGZvciBz dWJpZC9yZWxpZCwgaWYgYW55LgorICovCit2b2lkCitsb2dpY2FscmVwX3dvcmtlcl9zdG9wKE9p ZCBzdWJpZCwgT2lkIHJlbGlkKQoreworCUxvZ2ljYWxSZXBXb3JrZXIgKndvcmtlcjsKKworCUxX TG9ja0FjcXVpcmUoTG9naWNhbFJlcFdvcmtlckxvY2ssIExXX1NIQVJFRCk7CisKKwl3b3JrZXIg PSBsb2dpY2FscmVwX3dvcmtlcl9maW5kKHN1YmlkLCByZWxpZCwgZmFsc2UpOworCisJaWYgKHdv cmtlcikKKwl7CisJCUFzc2VydCghaXNQYXJhbGxlbEFwcGx5V29ya2VyKHdvcmtlcikpOworCQls b2dpY2FscmVwX3dvcmtlcl9zdG9wX2ludGVybmFsKHdvcmtlciwgU0lHVEVSTSk7CisJfQorCisJ TFdMb2NrUmVsZWFzZShMb2dpY2FsUmVwV29ya2VyTG9jayk7Cit9CisKKy8qCisgKiBTdG9wIHRo ZSBsb2dpY2FsIHJlcGxpY2F0aW9uIHBhcmFsbGVsIGFwcGx5IHdvcmtlciBjb3JyZXNwb25kaW5n IHRvIHRoZQorICogaW5wdXQgc2xvdCBudW1iZXIuCisgKgorICogTm9kZSB0aGF0IHRoZSBmdW5j dGlvbiBzZW5kcyBTSUdJTlQgaW5zdGVhZCBvZiBTSUdURVJNIHRvIHRoZSBwYXJhbGxlbCBhcHBs eQorICogd29ya2VyIHNvIHRoYXQgdGhlIHdvcmtlciBleGl0cyBjbGVhbmx5LgorICovCit2b2lk Citsb2dpY2FscmVwX3BhX3dvcmtlcl9zdG9wKGludCBzbG90X25vLCB1aW50MTYgZ2VuZXJhdGlv bikKK3sKKwlMb2dpY2FsUmVwV29ya2VyICp3b3JrZXI7CisKKwlBc3NlcnQoc2xvdF9ubyA+PSAw ICYmIHNsb3Rfbm8gPCBtYXhfbG9naWNhbF9yZXBsaWNhdGlvbl93b3JrZXJzKTsKKworCUxXTG9j a0FjcXVpcmUoTG9naWNhbFJlcFdvcmtlckxvY2ssIExXX1NIQVJFRCk7CisKKwl3b3JrZXIgPSAm TG9naWNhbFJlcEN0eC0+d29ya2Vyc1tzbG90X25vXTsKKwlBc3NlcnQoaXNQYXJhbGxlbEFwcGx5 V29ya2VyKHdvcmtlcikpOworCisJLyoKKwkgKiBPbmx5IHN0b3AgdGhlIHdvcmtlciBpZiB0aGUg Z2VuZXJhdGlvbiBtYXRjaGVzIGFuZCB0aGUgd29ya2VyIGlzIGFsaXZlLgorCSAqLworCWlmICh3 b3JrZXItPmdlbmVyYXRpb24gPT0gZ2VuZXJhdGlvbiAmJiB3b3JrZXItPnByb2MpCisJCWxvZ2lj YWxyZXBfd29ya2VyX3N0b3BfaW50ZXJuYWwod29ya2VyLCBTSUdJTlQpOwogCiAJTFdMb2NrUmVs ZWFzZShMb2dpY2FsUmVwV29ya2VyTG9jayk7CiB9CkBAIC01OTUsMTEgKzY3Niw0MCBAQCBsb2dp Y2FscmVwX3dvcmtlcl9hdHRhY2goaW50IHNsb3QpCiB9CiAKIC8qCi0gKiBEZXRhY2ggdGhlIHdv cmtlciAoY2xlYW5zIHVwIHRoZSB3b3JrZXIgaW5mbykuCisgKiBTdG9wIHRoZSBwYXJhbGxlbCBh cHBseSB3b3JrZXJzIGlmIGFueSwgYW5kIGRldGFjaCB0aGUgbGVhZGVyIGFwcGx5IHdvcmtlcgor ICogKGNsZWFucyB1cCB0aGUgd29ya2VyIGluZm8pLgogICovCiBzdGF0aWMgdm9pZAogbG9naWNh bHJlcF93b3JrZXJfZGV0YWNoKHZvaWQpCiB7CisJLyogU3RvcCB0aGUgcGFyYWxsZWwgYXBwbHkg d29ya2Vycy4gKi8KKwlpZiAoYW1fbGVhZGVyX2FwcGx5X3dvcmtlcigpKQorCXsKKwkJTGlzdAkg ICAqd29ya2VyczsKKwkJTGlzdENlbGwgICAqbGM7CisKKwkJLyoKKwkJICogRGV0YWNoIGZyb20g dGhlIGVycm9yX21xX2hhbmRsZSBmb3IgYWxsIHBhcmFsbGVsIGFwcGx5IHdvcmtlcnMKKwkJICog YmVmb3JlIHRlcm1pbmF0aW5nIHRoZW0uIFRoaXMgcHJldmVudHMgdGhlIGxlYWRlciBhcHBseSB3 b3JrZXIgZnJvbQorCQkgKiByZWNlaXZpbmcgdGhlIHdvcmtlciB0ZXJtaW5hdGlvbiBtZXNzYWdl IGFuZCBzZW5kaW5nIGl0IHRvIGxvZ3MKKwkJICogd2hlbiB0aGUgc2FtZSBpcyBhbHJlYWR5IGRv bmUgYnkgdGhlIHBhcmFsbGVsIHdvcmtlci4KKwkJICovCisJCXBhX2RldGFjaF9hbGxfZXJyb3Jf bXEoKTsKKworCQlMV0xvY2tBY3F1aXJlKExvZ2ljYWxSZXBXb3JrZXJMb2NrLCBMV19TSEFSRUQp OworCisJCXdvcmtlcnMgPSBsb2dpY2FscmVwX3dvcmtlcnNfZmluZChNeUxvZ2ljYWxSZXBXb3Jr ZXItPnN1YmlkLCB0cnVlKTsKKwkJZm9yZWFjaChsYywgd29ya2VycykKKwkJeworCQkJTG9naWNh bFJlcFdvcmtlciAqdyA9IChMb2dpY2FsUmVwV29ya2VyICopIGxmaXJzdChsYyk7CisKKwkJCWlm IChpc1BhcmFsbGVsQXBwbHlXb3JrZXIodykpCisJCQkJbG9naWNhbHJlcF93b3JrZXJfc3RvcF9p bnRlcm5hbCh3LCBTSUdURVJNKTsKKwkJfQorCisJCUxXTG9ja1JlbGVhc2UoTG9naWNhbFJlcFdv cmtlckxvY2spOworCX0KKwogCS8qIEJsb2NrIGNvbmN1cnJlbnQgYWNjZXNzLiAqLwogCUxXTG9j a0FjcXVpcmUoTG9naWNhbFJlcFdvcmtlckxvY2ssIExXX0VYQ0xVU0lWRSk7CiAKQEAgLTYyMiw2 ICs3MzIsOCBAQCBsb2dpY2FscmVwX3dvcmtlcl9jbGVhbnVwKExvZ2ljYWxSZXBXb3JrZXIgKndv cmtlcikKIAl3b3JrZXItPnVzZXJpZCA9IEludmFsaWRPaWQ7CiAJd29ya2VyLT5zdWJpZCA9IElu dmFsaWRPaWQ7CiAJd29ya2VyLT5yZWxpZCA9IEludmFsaWRPaWQ7CisJd29ya2VyLT5hcHBseV9s ZWFkZXJfcGlkID0gSW52YWxpZFBpZDsKKwl3b3JrZXItPnBhcmFsbGVsX2FwcGx5ID0gZmFsc2U7 CiB9CiAKIC8qCkBAIC02NTMsNiArNzY1LDEzIEBAIGxvZ2ljYWxyZXBfd29ya2VyX29uZXhpdChp bnQgY29kZSwgRGF0dW0gYXJnKQogCWlmIChNeUxvZ2ljYWxSZXBXb3JrZXItPnN0cmVhbV9maWxl c2V0ICE9IE5VTEwpCiAJCUZpbGVTZXREZWxldGVBbGwoTXlMb2dpY2FsUmVwV29ya2VyLT5zdHJl YW1fZmlsZXNldCk7CiAKKwkvKgorCSAqIFNlc3Npb24gbGV2ZWwgbG9ja3MgbWF5IGJlIGFjcXVp cmVkIG91dHNpZGUgb2YgYSB0cmFuc2FjdGlvbiBpbgorCSAqIHBhcmFsbGVsIGFwcGx5IG1vZGUg YW5kIHdpbGwgbm90IGJlIHJlbGVhc2VkIHdoZW4gdGhlIHdvcmtlcgorCSAqIHRlcm1pbmF0ZXMs IHNvIG1hbnVhbGx5IHJlbGVhc2UgYWxsIGxvY2tzIGJlZm9yZSB0aGUgd29ya2VyIGV4aXRzLgor CSAqLworCUxvY2tSZWxlYXNlQWxsKERFRkFVTFRfTE9DS01FVEhPRCwgdHJ1ZSk7CisKIAlBcHBs eUxhdW5jaGVyV2FrZXVwKCk7CiB9CiAKQEAgLTY4MCw2ICs3OTksMzMgQEAgbG9naWNhbHJlcF9z eW5jX3dvcmtlcl9jb3VudChPaWQgc3ViaWQpCiAJcmV0dXJuIHJlczsKIH0KIAorLyoKKyAqIENv dW50IHRoZSBudW1iZXIgb2YgcmVnaXN0ZXJlZCAoYnV0IG5vdCBuZWNlc3NhcmlseSBydW5uaW5n KSBwYXJhbGxlbCBhcHBseQorICogd29ya2VycyBmb3IgYSBzdWJzY3JpcHRpb24uCisgKi8KK3N0 YXRpYyBpbnQKK2xvZ2ljYWxyZXBfcGFfd29ya2VyX2NvdW50KE9pZCBzdWJpZCkKK3sKKwlpbnQJ CQlpOworCWludAkJCXJlcyA9IDA7CisKKwlBc3NlcnQoTFdMb2NrSGVsZEJ5TWUoTG9naWNhbFJl cFdvcmtlckxvY2spKTsKKworCS8qCisJICogU2NhbiBhbGwgYXR0YWNoZWQgcGFyYWxsZWwgYXBw bHkgd29ya2Vycywgb25seSBjb3VudGluZyB0aG9zZSB3aGljaAorCSAqIGhhdmUgdGhlIGdpdmVu IHN1YnNjcmlwdGlvbiBpZC4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbWF4X2xvZ2ljYWxfcmVw bGljYXRpb25fd29ya2VyczsgaSsrKQorCXsKKwkJTG9naWNhbFJlcFdvcmtlciAqdyA9ICZMb2dp Y2FsUmVwQ3R4LT53b3JrZXJzW2ldOworCisJCWlmICh3LT5zdWJpZCA9PSBzdWJpZCAmJiBpc1Bh cmFsbGVsQXBwbHlXb3JrZXIodykpCisJCQlyZXMrKzsKKwl9CisKKwlyZXR1cm4gcmVzOworfQor CiAvKgogICogQXBwbHlMYXVuY2hlclNobWVtU2l6ZQogICoJCUNvbXB1dGUgc3BhY2UgbmVlZGVk IGZvciByZXBsaWNhdGlvbiBsYXVuY2hlciBzaGFyZWQgbWVtb3J5CkBAIC04NjksNyArMTAxNSw3 IEBAIEFwcGx5TGF1bmNoZXJNYWluKERhdHVtIG1haW5fYXJnKQogCQkJCQl3YWl0X3RpbWUgPSB3 YWxfcmV0cmlldmVfcmV0cnlfaW50ZXJ2YWw7CiAKIAkJCQkJbG9naWNhbHJlcF93b3JrZXJfbGF1 bmNoKHN1Yi0+ZGJpZCwgc3ViLT5vaWQsIHN1Yi0+bmFtZSwKLQkJCQkJCQkJCQkJIHN1Yi0+b3du ZXIsIEludmFsaWRPaWQpOworCQkJCQkJCQkJCQkgc3ViLT5vd25lciwgSW52YWxpZE9pZCwgRFNN X0hBTkRMRV9JTlZBTElEKTsKIAkJCQl9CiAJCQl9CiAKQEAgLTk1Miw2ICsxMDk4LDEwIEBAIHBn X3N0YXRfZ2V0X3N1YnNjcmlwdGlvbihQR19GVU5DVElPTl9BUkdTKQogCQlpZiAoT2lkSXNWYWxp ZChzdWJpZCkgJiYgd29ya2VyLnN1YmlkICE9IHN1YmlkKQogCQkJY29udGludWU7CiAKKwkJLyog U2tpcCBpZiB0aGlzIGlzIGEgcGFyYWxsZWwgYXBwbHkgd29ya2VyICovCisJCWlmIChpc1BhcmFs bGVsQXBwbHlXb3JrZXIoJndvcmtlcikpCisJCQljb250aW51ZTsKKwogCQl3b3JrZXJfcGlkID0g d29ya2VyLnByb2MtPnBpZDsKIAogCQl2YWx1ZXNbMF0gPSBPYmplY3RJZEdldERhdHVtKHdvcmtl ci5zdWJpZCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL21l c29uLmJ1aWxkIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9tZXNvbi5idWlsZApp bmRleCA3MTQ0ZDdhOGE0Li5kNDhjZDRjNTkwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBs aWNhdGlvbi9sb2dpY2FsL21lc29uLmJ1aWxkCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L2xvZ2ljYWwvbWVzb24uYnVpbGQKQEAgLTEsNiArMSw3IEBACiAjIENvcHlyaWdodCAoYykgMjAy Mi0yMDIzLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAogCiBiYWNrZW5kX3Nv dXJjZXMgKz0gZmlsZXMoCisgICdhcHBseXBhcmFsbGVsd29ya2VyLmMnLAogICAnZGVjb2RlLmMn LAogICAnbGF1bmNoZXIuYycsCiAgICdsb2dpY2FsLmMnLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vbG9naWNhbC9vcmlnaW4uYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L2xvZ2ljYWwvb3JpZ2luLmMKaW5kZXggZmM4Njc2OGVkNi4uYjc1NGM0Mzg0MCAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9vcmlnaW4uYworKysgYi9zcmMvYmFj a2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL29yaWdpbi5jCkBAIC0xMDc1LDEyICsxMDc1LDIwIEBA IFJlcGxpY2F0aW9uT3JpZ2luRXhpdENsZWFudXAoaW50IGNvZGUsIERhdHVtIGFyZykKICAqIGFy cmF5IGRvZXNuJ3QgaGF2ZSB0byBiZSBzZWFyY2hlZCB3aGVuIGNhbGxpbmcKICAqIHJlcGxvcmln aW5fc2Vzc2lvbl9hZHZhbmNlKCkuCiAgKgotICogT2J2aW91c2x5IG9ubHkgb25lIHN1Y2ggY2Fj aGVkIG9yaWdpbiBjYW4gZXhpc3QgcGVyIHByb2Nlc3MgYW5kIHRoZSBjdXJyZW50Ci0gKiBjYWNo ZWQgdmFsdWUgY2FuIG9ubHkgYmUgc2V0IGFnYWluIGFmdGVyIHRoZSBwcmV2aW91cyB2YWx1ZSBp cyB0b3JuIGRvd24KLSAqIHdpdGggcmVwbG9yaWdpbl9zZXNzaW9uX3Jlc2V0KCkuCisgKiBOb3Jt YWxseSBvbmx5IG9uZSBzdWNoIGNhY2hlZCBvcmlnaW4gY2FuIGV4aXN0IHBlciBwcm9jZXNzIHNv IHRoZSBjYWNoZWQKKyAqIHZhbHVlIGNhbiBvbmx5IGJlIHNldCBhZ2FpbiBhZnRlciB0aGUgcHJl dmlvdXMgdmFsdWUgaXMgdG9ybiBkb3duIHdpdGgKKyAqIHJlcGxvcmlnaW5fc2Vzc2lvbl9yZXNl dCgpLiBGb3IgdGhpcyBub3JtYWwgY2FzZSBwYXNzIGFjcXVpcmVkX2J5ID0gMAorICogKG1lYW5p bmcgdGhlIHNsb3QgaXMgbm90IGFsbG93ZWQgdG8gYmUgYWxyZWFkeSBhY3F1aXJlZCBieSBhbm90 aGVyIHByb2Nlc3MpLgorICoKKyAqIEhvd2V2ZXIsIHNvbWV0aW1lcyBtdWx0aXBsZSBwcm9jZXNz ZXMgY2FuIHNhZmVseSByZS11c2UgdGhlIHNhbWUgb3JpZ2luIHNsb3QKKyAqIChmb3IgZXhhbXBs ZSwgbXVsdGlwbGUgcGFyYWxsZWwgYXBwbHkgcHJvY2Vzc2VzIGNhbiBzYWZlbHkgdXNlIHRoZSBz YW1lCisgKiBvcmlnaW4sIHByb3ZpZGVkIHRoZXkgbWFpbnRhaW4gY29tbWl0IG9yZGVyIGJ5IGFs bG93aW5nIG9ubHkgb25lIHByb2Nlc3MgdG8KKyAqIGNvbW1pdCBhdCBhIHRpbWUpLiBGb3IgdGhp cyBjYXNlIHRoZSBmaXJzdCBwcm9jZXNzIG11c3QgcGFzcyBhY3F1aXJlZF9ieSA9CisgKiAwLCBh bmQgdGhlbiB0aGUgb3RoZXIgcHJvY2Vzc2VzIHNoYXJpbmcgdGhhdCBzYW1lIG9yaWdpbiBjYW4g cGFzcworICogYWNxdWlyZWRfYnkgPSBQSUQgb2YgdGhlIGZpcnN0IHByb2Nlc3MuCiAgKi8KIHZv aWQKLXJlcGxvcmlnaW5fc2Vzc2lvbl9zZXR1cChSZXBPcmlnaW5JZCBub2RlKQorcmVwbG9yaWdp bl9zZXNzaW9uX3NldHVwKFJlcE9yaWdpbklkIG5vZGUsIGludCBhY3F1aXJlZF9ieSkKIHsKIAlz dGF0aWMgYm9vbCByZWdpc3RlcmVkX2NsZWFudXA7CiAJaW50CQkJaTsKQEAgLTExMjIsNyArMTEz MCw3IEBAIHJlcGxvcmlnaW5fc2Vzc2lvbl9zZXR1cChSZXBPcmlnaW5JZCBub2RlKQogCQlpZiAo Y3Vyc3RhdGUtPnJvaWRlbnQgIT0gbm9kZSkKIAkJCWNvbnRpbnVlOwogCi0JCWVsc2UgaWYgKGN1 cnN0YXRlLT5hY3F1aXJlZF9ieSAhPSAwKQorCQllbHNlIGlmIChjdXJzdGF0ZS0+YWNxdWlyZWRf YnkgIT0gMCAmJiBhY3F1aXJlZF9ieSA9PSAwKQogCQl7CiAJCQllcmVwb3J0KEVSUk9SLAogCQkJ CQkoZXJyY29kZShFUlJDT0RFX09CSkVDVF9JTl9VU0UpLApAQCAtMTE1Myw3ICsxMTYxLDExIEBA IHJlcGxvcmlnaW5fc2Vzc2lvbl9zZXR1cChSZXBPcmlnaW5JZCBub2RlKQogCiAJQXNzZXJ0KHNl c3Npb25fcmVwbGljYXRpb25fc3RhdGUtPnJvaWRlbnQgIT0gSW52YWxpZFJlcE9yaWdpbklkKTsK IAotCXNlc3Npb25fcmVwbGljYXRpb25fc3RhdGUtPmFjcXVpcmVkX2J5ID0gTXlQcm9jUGlkOwor CWlmIChhY3F1aXJlZF9ieSA9PSAwKQorCQlzZXNzaW9uX3JlcGxpY2F0aW9uX3N0YXRlLT5hY3F1 aXJlZF9ieSA9IE15UHJvY1BpZDsKKwllbHNlIGlmIChzZXNzaW9uX3JlcGxpY2F0aW9uX3N0YXRl LT5hY3F1aXJlZF9ieSAhPSBhY3F1aXJlZF9ieSkKKwkJZWxvZyhFUlJPUiwgImNvdWxkIG5vdCBm aW5kIHJlcGxpY2F0aW9uIHN0YXRlIHNsb3QgZm9yIHJlcGxpY2F0aW9uIG9yaWdpbiB3aXRoIE9J RCAldSB3aGljaCB3YXMgYWNxdWlyZWQgYnkgJWQiLAorCQkJIG5vZGUsIGFjcXVpcmVkX2J5KTsK IAogCUxXTG9ja1JlbGVhc2UoUmVwbGljYXRpb25PcmlnaW5Mb2NrKTsKIApAQCAtMTMzNyw3ICsx MzQ5LDcgQEAgcGdfcmVwbGljYXRpb25fb3JpZ2luX3Nlc3Npb25fc2V0dXAoUEdfRlVOQ1RJT05f QVJHUykKIAogCW5hbWUgPSB0ZXh0X3RvX2NzdHJpbmcoKHRleHQgKikgRGF0dW1HZXRQb2ludGVy KFBHX0dFVEFSR19EQVRVTSgwKSkpOwogCW9yaWdpbiA9IHJlcGxvcmlnaW5fYnlfbmFtZShuYW1l LCBmYWxzZSk7Ci0JcmVwbG9yaWdpbl9zZXNzaW9uX3NldHVwKG9yaWdpbik7CisJcmVwbG9yaWdp bl9zZXNzaW9uX3NldHVwKG9yaWdpbiwgMCk7CiAKIAlyZXBsb3JpZ2luX3Nlc3Npb25fb3JpZ2lu ID0gb3JpZ2luOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2Fs L3Byb3RvLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Byb3RvLmMKaW5kZXgg ZDAwZTkwZGQ1ZS4uM2E5ZDUzYTYxZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vbG9naWNhbC9wcm90by5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwv cHJvdG8uYwpAQCAtMTE2NCwxMCArMTE2NCwxNCBAQCBsb2dpY2FscmVwX3JlYWRfc3RyZWFtX2Nv bW1pdChTdHJpbmdJbmZvIGluLCBMb2dpY2FsUmVwQ29tbWl0RGF0YSAqY29tbWl0X2RhdGEpCiAv KgogICogV3JpdGUgU1RSRUFNIEFCT1JUIHRvIHRoZSBvdXRwdXQgc3RyZWFtLiBOb3RlIHRoYXQg eGlkIGFuZCBzdWJ4aWQgd2lsbCBiZQogICogc2FtZSBmb3IgdGhlIHRvcC1sZXZlbCB0cmFuc2Fj dGlvbiBhYm9ydC4KKyAqCisgKiBJZiB3cml0ZV9hYm9ydF9pbmZvIGlzIHRydWUsIHNlbmQgdGhl IGFib3J0X2xzbiBhbmQgYWJvcnRfdGltZSBmaWVsZHMsCisgKiBvdGhlcndpc2UgZG9uJ3QuCiAg Ki8KIHZvaWQKIGxvZ2ljYWxyZXBfd3JpdGVfc3RyZWFtX2Fib3J0KFN0cmluZ0luZm8gb3V0LCBU cmFuc2FjdGlvbklkIHhpZCwKLQkJCQkJCQkgIFRyYW5zYWN0aW9uSWQgc3VieGlkKQorCQkJCQkJ CSAgVHJhbnNhY3Rpb25JZCBzdWJ4aWQsIFhMb2dSZWNQdHIgYWJvcnRfbHNuLAorCQkJCQkJCSAg VGltZXN0YW1wVHogYWJvcnRfdGltZSwgYm9vbCB3cml0ZV9hYm9ydF9pbmZvKQogewogCXBxX3Nl bmRieXRlKG91dCwgTE9HSUNBTF9SRVBfTVNHX1NUUkVBTV9BQk9SVCk7CiAKQEAgLTExNzYsMTkg KzExODAsNDAgQEAgbG9naWNhbHJlcF93cml0ZV9zdHJlYW1fYWJvcnQoU3RyaW5nSW5mbyBvdXQs IFRyYW5zYWN0aW9uSWQgeGlkLAogCS8qIHRyYW5zYWN0aW9uIElEICovCiAJcHFfc2VuZGludDMy KG91dCwgeGlkKTsKIAlwcV9zZW5kaW50MzIob3V0LCBzdWJ4aWQpOworCisJaWYgKHdyaXRlX2Fi b3J0X2luZm8pCisJeworCQlwcV9zZW5kaW50NjQob3V0LCBhYm9ydF9sc24pOworCQlwcV9zZW5k aW50NjQob3V0LCBhYm9ydF90aW1lKTsKKwl9CiB9CiAKIC8qCiAgKiBSZWFkIFNUUkVBTSBBQk9S VCBmcm9tIHRoZSBvdXRwdXQgc3RyZWFtLgorICoKKyAqIElmIHJlYWRfYWJvcnRfaW5mbyBpcyB0 cnVlLCByZWFkIHRoZSBhYm9ydF9sc24gYW5kIGFib3J0X3RpbWUgZmllbGRzLAorICogb3RoZXJ3 aXNlIGRvbid0LgogICovCiB2b2lkCi1sb2dpY2FscmVwX3JlYWRfc3RyZWFtX2Fib3J0KFN0cmlu Z0luZm8gaW4sIFRyYW5zYWN0aW9uSWQgKnhpZCwKLQkJCQkJCQkgVHJhbnNhY3Rpb25JZCAqc3Vi eGlkKQorbG9naWNhbHJlcF9yZWFkX3N0cmVhbV9hYm9ydChTdHJpbmdJbmZvIGluLAorCQkJCQkJ CSBMb2dpY2FsUmVwU3RyZWFtQWJvcnREYXRhICphYm9ydF9kYXRhLAorCQkJCQkJCSBib29sIHJl YWRfYWJvcnRfaW5mbykKIHsKLQlBc3NlcnQoeGlkICYmIHN1YnhpZCk7CisJQXNzZXJ0KGFib3J0 X2RhdGEpOworCisJYWJvcnRfZGF0YS0+eGlkID0gcHFfZ2V0bXNnaW50KGluLCA0KTsKKwlhYm9y dF9kYXRhLT5zdWJ4aWQgPSBwcV9nZXRtc2dpbnQoaW4sIDQpOwogCi0JKnhpZCA9IHBxX2dldG1z Z2ludChpbiwgNCk7Ci0JKnN1YnhpZCA9IHBxX2dldG1zZ2ludChpbiwgNCk7CisJaWYgKHJlYWRf YWJvcnRfaW5mbykKKwl7CisJCWFib3J0X2RhdGEtPmFib3J0X2xzbiA9IHBxX2dldG1zZ2ludDY0 KGluKTsKKwkJYWJvcnRfZGF0YS0+YWJvcnRfdGltZSA9IHBxX2dldG1zZ2ludDY0KGluKTsKKwl9 CisJZWxzZQorCXsKKwkJYWJvcnRfZGF0YS0+YWJvcnRfbHNuID0gSW52YWxpZFhMb2dSZWNQdHI7 CisJCWFib3J0X2RhdGEtPmFib3J0X3RpbWUgPSAwOworCX0KIH0KIAogLyoKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1ZmZlci5jIGIvc3JjL2Jh Y2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZW9yZGVyYnVmZmVyLmMKaW5kZXggZjI4NGZjMmUz MC4uNjZmYjAzOTAzYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNh bC9yZW9yZGVyYnVmZmVyLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9y ZW9yZGVyYnVmZmVyLmMKQEAgLTI4NzMsNyArMjg3Myw4IEBAIFJlb3JkZXJCdWZmZXJGaW5pc2hQ cmVwYXJlZChSZW9yZGVyQnVmZmVyICpyYiwgVHJhbnNhY3Rpb25JZCB4aWQsCiAgKiBkaXNrLgog ICovCiB2b2lkCi1SZW9yZGVyQnVmZmVyQWJvcnQoUmVvcmRlckJ1ZmZlciAqcmIsIFRyYW5zYWN0 aW9uSWQgeGlkLCBYTG9nUmVjUHRyIGxzbikKK1Jlb3JkZXJCdWZmZXJBYm9ydChSZW9yZGVyQnVm ZmVyICpyYiwgVHJhbnNhY3Rpb25JZCB4aWQsIFhMb2dSZWNQdHIgbHNuLAorCQkJCSAgIFRpbWVz dGFtcFR6IGFib3J0X3RpbWUpCiB7CiAJUmVvcmRlckJ1ZmZlclRYTiAqdHhuOwogCkBAIC0yODg0 LDYgKzI4ODUsOCBAQCBSZW9yZGVyQnVmZmVyQWJvcnQoUmVvcmRlckJ1ZmZlciAqcmIsIFRyYW5z YWN0aW9uSWQgeGlkLCBYTG9nUmVjUHRyIGxzbikKIAlpZiAodHhuID09IE5VTEwpCiAJCXJldHVy bjsKIAorCXR4bi0+eGFjdF90aW1lLmFib3J0X3RpbWUgPSBhYm9ydF90aW1lOworCiAJLyogRm9y IHN0cmVhbWVkIHRyYW5zYWN0aW9ucyBub3RpZnkgdGhlIHJlbW90ZSBub2RlIGFib3V0IHRoZSBh Ym9ydC4gKi8KIAlpZiAocmJ0eG5faXNfc3RyZWFtZWQodHhuKSkKIAl7CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3RhYmxlc3luYy5jIGIvc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vbG9naWNhbC90YWJsZXN5bmMuYwppbmRleCAyZmRmZWI1YjRjLi4wMTZkMGE0 ODM4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3RhYmxlc3lu Yy5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvdGFibGVzeW5jLmMKQEAg LTE0LDcgKzE0LDcgQEAKICAqCSAgVGhlIGluaXRpYWwgZGF0YSBzeW5jaHJvbml6YXRpb24gaXMg ZG9uZSBzZXBhcmF0ZWx5IGZvciBlYWNoIHRhYmxlLAogICoJICBpbiBhIHNlcGFyYXRlIGFwcGx5 IHdvcmtlciB0aGF0IG9ubHkgZmV0Y2hlcyB0aGUgaW5pdGlhbCBzbmFwc2hvdCBkYXRhCiAgKgkg IGZyb20gdGhlIHB1Ymxpc2hlciBhbmQgdGhlbiBzeW5jaHJvbml6ZXMgdGhlIHBvc2l0aW9uIGlu IHRoZSBzdHJlYW0gd2l0aAotICoJICB0aGUgbWFpbiBhcHBseSB3b3JrZXIuCisgKgkgIHRoZSBs ZWFkZXIgYXBwbHkgd29ya2VyLgogICoKICAqCSAgVGhlcmUgYXJlIHNldmVyYWwgcmVhc29ucyBm b3IgZG9pbmcgdGhlIHN5bmNocm9uaXphdGlvbiB0aGlzIHdheToKICAqCSAgIC0gSXQgYWxsb3dz IHVzIHRvIHBhcmFsbGVsaXplIHRoZSBpbml0aWFsIGRhdGEgc3luY2hyb25pemF0aW9uCkBAIC0x NTMsNyArMTUzLDcgQEAgZmluaXNoX3N5bmNfd29ya2VyKHZvaWQpCiAJCQkJCWdldF9yZWxfbmFt ZShNeUxvZ2ljYWxSZXBXb3JrZXItPnJlbGlkKSkpKTsKIAlDb21taXRUcmFuc2FjdGlvbkNvbW1h bmQoKTsKIAotCS8qIEZpbmQgdGhlIG1haW4gYXBwbHkgd29ya2VyIGFuZCBzaWduYWwgaXQuICov CisJLyogRmluZCB0aGUgbGVhZGVyIGFwcGx5IHdvcmtlciBhbmQgc2lnbmFsIGl0LiAqLwogCWxv Z2ljYWxyZXBfd29ya2VyX3dha2V1cChNeUxvZ2ljYWxSZXBXb3JrZXItPnN1YmlkLCBJbnZhbGlk T2lkKTsKIAogCS8qIFN0b3AgZ3JhY2VmdWxseSAqLwpAQCAtNjA5LDcgKzYwOSw4IEBAIHByb2Nl c3Nfc3luY2luZ190YWJsZXNfZm9yX2FwcGx5KFhMb2dSZWNQdHIgY3VycmVudF9sc24pCiAJCQkJ CQkJCQkJCQkgTXlTdWJzY3JpcHRpb24tPm9pZCwKIAkJCQkJCQkJCQkJCSBNeVN1YnNjcmlwdGlv bi0+bmFtZSwKIAkJCQkJCQkJCQkJCSBNeUxvZ2ljYWxSZXBXb3JrZXItPnVzZXJpZCwKLQkJCQkJ CQkJCQkJCSByc3RhdGUtPnJlbGlkKTsKKwkJCQkJCQkJCQkJCSByc3RhdGUtPnJlbGlkLAorCQkJ CQkJCQkJCQkJIERTTV9IQU5ETEVfSU5WQUxJRCk7CiAJCQkJCQloZW50cnktPmxhc3Rfc3RhcnRf dGltZSA9IG5vdzsKIAkJCQkJfQogCQkJCX0KQEAgLTYzMCw2ICs2MzEsMTQgQEAgcHJvY2Vzc19z eW5jaW5nX3RhYmxlc19mb3JfYXBwbHkoWExvZ1JlY1B0ciBjdXJyZW50X2xzbikKIHZvaWQKIHBy b2Nlc3Nfc3luY2luZ190YWJsZXMoWExvZ1JlY1B0ciBjdXJyZW50X2xzbikKIHsKKwkvKgorCSAq IFNraXAgZm9yIHBhcmFsbGVsIGFwcGx5IHdvcmtlcnMgYmVjYXVzZSB0aGV5IG9ubHkgb3BlcmF0 ZSBvbiB0YWJsZXMKKwkgKiB0aGF0IGFyZSBpbiBhIFJFQURZIHN0YXRlLiBTZWUgcGFfY2FuX3N0 YXJ0KCkgYW5kCisJICogc2hvdWxkX2FwcGx5X2NoYW5nZXNfZm9yX3JlbCgpLgorCSAqLworCWlm IChhbV9wYXJhbGxlbF9hcHBseV93b3JrZXIoKSkKKwkJcmV0dXJuOworCiAJaWYgKGFtX3RhYmxl c3luY193b3JrZXIoKSkKIAkJcHJvY2Vzc19zeW5jaW5nX3RhYmxlc19mb3Jfc3luYyhjdXJyZW50 X2xzbik7CiAJZWxzZQpAQCAtMTI0Nyw3ICsxMjU2LDcgQEAgTG9naWNhbFJlcFN5bmNUYWJsZVN0 YXJ0KFhMb2dSZWNQdHIgKm9yaWdpbl9zdGFydHBvcykKIAogCS8qCiAJICogSGVyZSB3ZSB1c2Ug dGhlIHNsb3QgbmFtZSBpbnN0ZWFkIG9mIHRoZSBzdWJzY3JpcHRpb24gbmFtZSBhcyB0aGUKLQkg KiBhcHBsaWNhdGlvbl9uYW1lLCBzbyB0aGF0IGl0IGlzIGRpZmZlcmVudCBmcm9tIHRoZSBtYWlu IGFwcGx5IHdvcmtlciwKKwkgKiBhcHBsaWNhdGlvbl9uYW1lLCBzbyB0aGF0IGl0IGlzIGRpZmZl cmVudCBmcm9tIHRoZSBsZWFkZXIgYXBwbHkgd29ya2VyLAogCSAqIHNvIHRoYXQgc3luY2hyb25v dXMgcmVwbGljYXRpb24gY2FuIGRpc3Rpbmd1aXNoIHRoZW0uCiAJICovCiAJTG9nUmVwV29ya2Vy V2FsUmN2Q29ubiA9CkBAIC0xMjk1LDcgKzEzMDQsNyBAQCBMb2dpY2FsUmVwU3luY1RhYmxlU3Rh cnQoWExvZ1JlY1B0ciAqb3JpZ2luX3N0YXJ0cG9zKQogCQkgKiB0aW1lIHRoaXMgdGFibGVzeW5j IHdhcyBsYXVuY2hlZC4KIAkJICovCiAJCW9yaWdpbmlkID0gcmVwbG9yaWdpbl9ieV9uYW1lKG9y aWdpbm5hbWUsIGZhbHNlKTsKLQkJcmVwbG9yaWdpbl9zZXNzaW9uX3NldHVwKG9yaWdpbmlkKTsK KwkJcmVwbG9yaWdpbl9zZXNzaW9uX3NldHVwKG9yaWdpbmlkLCAwKTsKIAkJcmVwbG9yaWdpbl9z ZXNzaW9uX29yaWdpbiA9IG9yaWdpbmlkOwogCQkqb3JpZ2luX3N0YXJ0cG9zID0gcmVwbG9yaWdp bl9zZXNzaW9uX2dldF9wcm9ncmVzcyhmYWxzZSk7CiAKQEAgLTE0MDYsNyArMTQxNSw3IEBAIExv Z2ljYWxSZXBTeW5jVGFibGVTdGFydChYTG9nUmVjUHRyICpvcmlnaW5fc3RhcnRwb3MpCiAJCQkJ CQkgICB0cnVlIC8qIGdvIGJhY2t3YXJkICovICwgdHJ1ZSAvKiBXQUwgbG9nICovICk7CiAJCVVu bG9ja1JlbGF0aW9uT2lkKFJlcGxpY2F0aW9uT3JpZ2luUmVsYXRpb25JZCwgUm93RXhjbHVzaXZl TG9jayk7CiAKLQkJcmVwbG9yaWdpbl9zZXNzaW9uX3NldHVwKG9yaWdpbmlkKTsKKwkJcmVwbG9y aWdpbl9zZXNzaW9uX3NldHVwKG9yaWdpbmlkLCAwKTsKIAkJcmVwbG9yaWdpbl9zZXNzaW9uX29y aWdpbiA9IG9yaWdpbmlkOwogCX0KIAllbHNlCkBAIC0xNDYxLDggKzE0NzAsOCBAQCBjb3B5X3Rh YmxlX2RvbmU6CiAJU3BpbkxvY2tSZWxlYXNlKCZNeUxvZ2ljYWxSZXBXb3JrZXItPnJlbG11dGV4 KTsKIAogCS8qCi0JICogRmluYWxseSwgd2FpdCB1bnRpbCB0aGUgbWFpbiBhcHBseSB3b3JrZXIg dGVsbHMgdXMgdG8gY2F0Y2ggdXAgYW5kIHRoZW4KLQkgKiByZXR1cm4gdG8gbGV0IExvZ2ljYWxS ZXBBcHBseUxvb3AgZG8gaXQuCisJICogRmluYWxseSwgd2FpdCB1bnRpbCB0aGUgbGVhZGVyIGFw cGx5IHdvcmtlciB0ZWxscyB1cyB0byBjYXRjaCB1cCBhbmQKKwkgKiB0aGVuIHJldHVybiB0byBs ZXQgTG9naWNhbFJlcEFwcGx5TG9vcCBkbyBpdC4KIAkgKi8KIAl3YWl0X2Zvcl93b3JrZXJfc3Rh dGVfY2hhbmdlKFNVQlJFTF9TVEFURV9DQVRDSFVQKTsKIAlyZXR1cm4gc2xvdG5hbWU7CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jIGIvc3JjL2Jh Y2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYwppbmRleCA0NDZmODRmYTk3Li4xOTc2 N2I0ZGZjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtl ci5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMKQEAgLTIy LDggKzIyLDEyIEBACiAgKiBTVFJFQU1FRCBUUkFOU0FDVElPTlMKICAqIC0tLS0tLS0tLS0tLS0t LS0tLS0tLQogICogU3RyZWFtZWQgdHJhbnNhY3Rpb25zIChsYXJnZSB0cmFuc2FjdGlvbnMgZXhj ZWVkaW5nIGEgbWVtb3J5IGxpbWl0IG9uIHRoZQotICogdXBzdHJlYW0pIGFyZSBub3QgYXBwbGll ZCBpbW1lZGlhdGVseSwgYnV0IGluc3RlYWQsIHRoZSBkYXRhIGlzIHdyaXR0ZW4KLSAqIHRvIHRl bXBvcmFyeSBmaWxlcyBhbmQgdGhlbiBhcHBsaWVkIGF0IG9uY2Ugd2hlbiB0aGUgZmluYWwgY29t bWl0IGFycml2ZXMuCisgKiB1cHN0cmVhbSkgYXJlIGFwcGxpZWQgdXNpbmcgb25lIG9mIHR3byBh cHByb2FjaGVzOgorICoKKyAqIDEpIFdyaXRlIHRvIHRlbXBvcmFyeSBmaWxlcyBhbmQgYXBwbHkg d2hlbiB0aGUgZmluYWwgY29tbWl0IGFycml2ZXMKKyAqCisgKiBUaGlzIGFwcHJvYWNoIGlzIHVz ZWQgd2hlbiB0aGUgdXNlciBoYXMgc2V0IHRoZSBzdWJzY3JpcHRpb24ncyBzdHJlYW1pbmcKKyAq IG9wdGlvbiBhcyBvbi4KICAqCiAgKiBVbmxpa2UgdGhlIHJlZ3VsYXIgKG5vbi1zdHJlYW1lZCkg Y2FzZSwgaGFuZGxpbmcgc3RyZWFtZWQgdHJhbnNhY3Rpb25zIGhhcwogICogdG8gaGFuZGxlIGFi b3J0cyBvZiBib3RoIHRoZSB0b3BsZXZlbCB0cmFuc2FjdGlvbiBhbmQgc3VidHJhbnNhY3Rpb25z LiBUaGlzCkBAIC01MCw2ICs1NCwxMiBAQAogICogdGhlIGZpbGUgd2UgZGVzaXJlZCBhY3Jvc3Mg bXVsdGlwbGUgc3RyZWFtLW9wZW4gY2FsbHMgZm9yIHRoZSBzYW1lCiAgKiB0cmFuc2FjdGlvbi4K ICAqCisgKiAyKSBQYXJhbGxlbCBhcHBseSB3b3JrZXJzLgorICoKKyAqIFRoaXMgYXBwcm9hY2gg aXMgdXNlZCB3aGVuIHRoZSB1c2VyIGhhcyBzZXQgdGhlIHN1YnNjcmlwdGlvbidzIHN0cmVhbWlu ZworICogb3B0aW9uIGFzIHBhcmFsbGVsLiBTZWUgbG9naWNhbC9hcHBseXBhcmFsbGVsd29ya2Vy LmMgZm9yIGluZm9ybWF0aW9uIGFib3V0CisgKiB0aGlzIGFwcHJvYWNoLgorICoKICAqIFRXT19Q SEFTRSBUUkFOU0FDVElPTlMKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIFR3byBwaGFz ZSB0cmFuc2FjdGlvbnMgYXJlIHJlcGxheWVkIGF0IHByZXBhcmUgYW5kIHRoZW4gY29tbWl0dGVk IG9yCkBAIC0yMzMsNyArMjQzLDUyIEBAIHR5cGVkZWYgc3RydWN0IEFwcGx5RXJyb3JDYWxsYmFj a0FyZwogCWNoYXIJICAgKm9yaWdpbl9uYW1lOwogfSBBcHBseUVycm9yQ2FsbGJhY2tBcmc7CiAK LXN0YXRpYyBBcHBseUVycm9yQ2FsbGJhY2tBcmcgYXBwbHlfZXJyb3JfY2FsbGJhY2tfYXJnID0K Ky8qCisgKiBUaGUgYWN0aW9uIHRvIGJlIHRha2VuIGZvciB0aGUgY2hhbmdlcyBpbiB0aGUgdHJh bnNhY3Rpb24uCisgKgorICogVFJBTlNfTEVBREVSX0FQUExZOgorICogVGhpcyBhY3Rpb24gbWVh bnMgdGhhdCB3ZSBhcmUgaW4gdGhlIGxlYWRlciBhcHBseSB3b3JrZXIgYW5kIGNoYW5nZXMgb2Yg dGhlCisgKiB0cmFuc2FjdGlvbiBhcmUgYXBwbGllZCBkaXJlY3RseSBieSB0aGUgd29ya2VyLgor ICoKKyAqIFRSQU5TX0xFQURFUl9TRVJJQUxJWkU6CisgKiBUaGlzIGFjdGlvbiBtZWFucyB0aGF0 IHdlIGFyZSBpbiB0aGUgbGVhZGVyIGFwcGx5IHdvcmtlciBvciB0YWJsZSBzeW5jCisgKiB3b3Jr ZXIuIENoYW5nZXMgYXJlIHdyaXR0ZW4gdG8gdGVtcG9yYXJ5IGZpbGVzIGFuZCB0aGVuIGFwcGxp ZWQgd2hlbiB0aGUKKyAqIGZpbmFsIGNvbW1pdCBhcnJpdmVzLgorICoKKyAqIFRSQU5TX0xFQURF Ul9TRU5EX1RPX1BBUkFMTEVMOgorICogVGhpcyBhY3Rpb24gbWVhbnMgdGhhdCB3ZSBhcmUgaW4g dGhlIGxlYWRlciBhcHBseSB3b3JrZXIgYW5kIG5lZWQgdG8gc2VuZAorICogdGhlIGNoYW5nZXMg dG8gdGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlci4KKyAqCisgKiBUUkFOU19MRUFERVJfUEFSVElB TF9TRVJJQUxJWkU6CisgKiBUaGlzIGFjdGlvbiBtZWFucyB0aGF0IHdlIGFyZSBpbiB0aGUgbGVh ZGVyIGFwcGx5IHdvcmtlciBhbmQgaGF2ZSBzZW50IHNvbWUKKyAqIGNoYW5nZXMgZGlyZWN0bHkg dG8gdGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlciBhbmQgdGhlIHJlbWFpbmluZyBjaGFuZ2VzIGFy ZQorICogc2VyaWFsaXplZCB0byBhIGZpbGUsIGR1ZSB0byB0aW1lb3V0IHdoaWxlIHNlbmRpbmcg ZGF0YS4gVGhlIHBhcmFsbGVsIGFwcGx5CisgKiB3b3JrZXIgd2lsbCBhcHBseSB0aGVzZSBzZXJp YWxpemVkIGNoYW5nZXMgd2hlbiB0aGUgZmluYWwgY29tbWl0IGFycml2ZXMuCisgKgorICogV2Ug Y2FuJ3QgdXNlIFRSQU5TX0xFQURFUl9TRVJJQUxJWkUgZm9yIHRoaXMgY2FzZSBiZWNhdXNlLCBp biBhZGRpdGlvbiB0bworICogc2VyaWFsaXppbmcgY2hhbmdlcywgdGhlIGxlYWRlciB3b3JrZXIg YWxzbyBuZWVkcyB0byBzZXJpYWxpemUgdGhlCisgKiBTVFJFQU1fWFhYIG1lc3NhZ2UgdG8gYSBm aWxlLCBhbmQgd2FpdCBmb3IgdGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlciB0bworICogZmluaXNo IHRoZSB0cmFuc2FjdGlvbiB3aGVuIHByb2Nlc3NpbmcgdGhlIHRyYW5zYWN0aW9uIGZpbmlzaCBj b21tYW5kLiBTbworICogdGhpcyBuZXcgYWN0aW9uIHdhcyBpbnRyb2R1Y2VkIHRvIGtlZXAgdGhl IGNvZGUgYW5kIGxvZ2ljIGNsZWFyLgorICoKKyAqIFRSQU5TX1BBUkFMTEVMX0FQUExZOgorICog VGhpcyBhY3Rpb24gbWVhbnMgdGhhdCB3ZSBhcmUgaW4gdGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtl ciBhbmQgY2hhbmdlcyBvZgorICogdGhlIHRyYW5zYWN0aW9uIGFyZSBhcHBsaWVkIGRpcmVjdGx5 IGJ5IHRoZSB3b3JrZXIuCisgKi8KK3R5cGVkZWYgZW51bQoreworCS8qIFRoZSBhY3Rpb24gZm9y IG5vbi1zdHJlYW1pbmcgdHJhbnNhY3Rpb25zLiAqLworCVRSQU5TX0xFQURFUl9BUFBMWSwKKwor CS8qIEFjdGlvbnMgZm9yIHN0cmVhbWluZyB0cmFuc2FjdGlvbnMuICovCisJVFJBTlNfTEVBREVS X1NFUklBTElaRSwKKwlUUkFOU19MRUFERVJfU0VORF9UT19QQVJBTExFTCwKKwlUUkFOU19MRUFE RVJfUEFSVElBTF9TRVJJQUxJWkUsCisJVFJBTlNfUEFSQUxMRUxfQVBQTFkKK30gVHJhbnNBcHBs eUFjdGlvbjsKKworLyogZXJyY29udGV4dCB0cmFja2VyICovCitBcHBseUVycm9yQ2FsbGJhY2tB cmcgYXBwbHlfZXJyb3JfY2FsbGJhY2tfYXJnID0KIHsKIAkuY29tbWFuZCA9IDAsCiAJLnJlbCA9 IE5VTEwsCkBAIC0yNDMsNyArMjk4LDkgQEAgc3RhdGljIEFwcGx5RXJyb3JDYWxsYmFja0FyZyBh cHBseV9lcnJvcl9jYWxsYmFja19hcmcgPQogCS5vcmlnaW5fbmFtZSA9IE5VTEwsCiB9OwogCi1z dGF0aWMgTWVtb3J5Q29udGV4dCBBcHBseU1lc3NhZ2VDb250ZXh0ID0gTlVMTDsKK0Vycm9yQ29u dGV4dENhbGxiYWNrICphcHBseV9lcnJvcl9jb250ZXh0X3N0YWNrID0gTlVMTDsKKworTWVtb3J5 Q29udGV4dCBBcHBseU1lc3NhZ2VDb250ZXh0ID0gTlVMTDsKIE1lbW9yeUNvbnRleHQgQXBwbHlD b250ZXh0ID0gTlVMTDsKIAogLyogcGVyIHN0cmVhbSBjb250ZXh0IGZvciBzdHJlYW1pbmcgdHJh bnNhY3Rpb25zICovCkBAIC0yNjIsMTcgKzMxOSwyNiBAQCBzdGF0aWMgYm9vbCBpbl9zdHJlYW1l ZF90cmFuc2FjdGlvbiA9IGZhbHNlOwogCiBzdGF0aWMgVHJhbnNhY3Rpb25JZCBzdHJlYW1feGlk ID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7CiAKKy8qCisgKiBUaGUgbnVtYmVyIG9mIGNoYW5nZXMg YXBwbGllZCBieSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgZHVyaW5nIG9uZSBzdHJlYW1pbmcKKyAq IGJsb2NrLgorICovCitzdGF0aWMgdWludDMyIHBhcmFsbGVsX3N0cmVhbV9uY2hhbmdlcyA9IDA7 CisKIC8qCiAgKiBXZSBlbmFibGUgc2tpcHBpbmcgYWxsIGRhdGEgbW9kaWZpY2F0aW9uIGNoYW5n ZXMgKElOU0VSVCwgVVBEQVRFLCBldGMuKSBmb3IKICAqIHRoZSBzdWJzY3JpcHRpb24gaWYgdGhl IHJlbW90ZSB0cmFuc2FjdGlvbidzIGZpbmlzaCBMU04gbWF0Y2hlcyB0aGUgc3Vic2tpcGxzbi4K ICAqIE9uY2Ugd2Ugc3RhcnQgc2tpcHBpbmcgY2hhbmdlcywgd2UgZG9uJ3Qgc3RvcCBpdCB1bnRp bCB3ZSBza2lwIGFsbCBjaGFuZ2VzIG9mCiAgKiB0aGUgdHJhbnNhY3Rpb24gZXZlbiBpZiBwZ19z dWJzY3JpcHRpb24gaXMgdXBkYXRlZCBhbmQgTXlTdWJzY3JpcHRpb24tPnNraXBsc24KLSAqIGdl dHMgY2hhbmdlZCBvciByZXNldCBkdXJpbmcgdGhhdC4gQWxzbywgaW4gc3RyZWFtaW5nIHRyYW5z YWN0aW9uIGNhc2VzLCB3ZQotICogZG9uJ3Qgc2tpcCByZWNlaXZpbmcgYW5kIHNwb29saW5nIHRo ZSBjaGFuZ2VzIHNpbmNlIHdlIGRlY2lkZSB3aGV0aGVyIG9yIG5vdAorICogZ2V0cyBjaGFuZ2Vk IG9yIHJlc2V0IGR1cmluZyB0aGF0LiBBbHNvLCBpbiBzdHJlYW1pbmcgdHJhbnNhY3Rpb24gY2Fz ZXMgKHN0cmVhbWluZyA9IG9uKSwKKyAqIHdlIGRvbid0IHNraXAgcmVjZWl2aW5nIGFuZCBzcG9v bGluZyB0aGUgY2hhbmdlcyBzaW5jZSB3ZSBkZWNpZGUgd2hldGhlciBvciBub3QKICAqIHRvIHNr aXAgYXBwbHlpbmcgdGhlIGNoYW5nZXMgd2hlbiBzdGFydGluZyB0byBhcHBseSBjaGFuZ2VzLiBU aGUgc3Vic2tpcGxzbiBpcwogICogY2xlYXJlZCBhZnRlciBzdWNjZXNzZnVsbHkgc2tpcHBpbmcg dGhlIHRyYW5zYWN0aW9uIG9yIGFwcGx5aW5nIG5vbi1lbXB0eQogICogdHJhbnNhY3Rpb24uIFRo ZSBsYXR0ZXIgcHJldmVudHMgdGhlIG1pc3Rha2VubHkgc3BlY2lmaWVkIHN1YnNraXBsc24gZnJv bQotICogYmVpbmcgbGVmdC4KKyAqIGJlaW5nIGxlZnQuIE5vdGUgdGhhdCB3ZSBjYW5ub3Qgc2tp cCB0aGUgc3RyZWFtaW5nIHRyYW5zYWN0aW9ucyB3aGVuIHVzaW5nCisgKiBwYXJhbGxlbCBhcHBs eSB3b3JrZXJzIGJlY2F1c2Ugd2UgY2Fubm90IGdldCB0aGUgZmluaXNoIExTTiBiZWZvcmUgYXBw bHlpbmcKKyAqIHRoZSBjaGFuZ2VzLiBTbywgd2UgZG9uJ3Qgc3RhcnQgcGFyYWxsZWwgYXBwbHkg d29ya2VyIHdoZW4gZmluaXNoIExTTiBpcyBzZXQKKyAqIGJ5IHRoZSB1c2VyLgogICovCiBzdGF0 aWMgWExvZ1JlY1B0ciBza2lwX3hhY3RfZmluaXNoX2xzbiA9IEludmFsaWRYTG9nUmVjUHRyOwog I2RlZmluZSBpc19za2lwcGluZ19jaGFuZ2VzKCkgKHVubGlrZWx5KCFYTG9nUmVjUHRySXNJbnZh bGlkKHNraXBfeGFjdF9maW5pc2hfbHNuKSkpCkBAIC0zMTIsMjMgKzM3OCwxNiBAQCBzdGF0aWMg aW5saW5lIHZvaWQgY2xlYW51cF9zdWJ4YWN0X2luZm8odm9pZCk7CiAvKgogICogU2VyaWFsaXpl IGFuZCBkZXNlcmlhbGl6ZSBjaGFuZ2VzIGZvciBhIHRvcGxldmVsIHRyYW5zYWN0aW9uLgogICov Ci1zdGF0aWMgdm9pZCBzdHJlYW1fY2xlYW51cF9maWxlcyhPaWQgc3ViaWQsIFRyYW5zYWN0aW9u SWQgeGlkKTsKIHN0YXRpYyB2b2lkIHN0cmVhbV9vcGVuX2ZpbGUoT2lkIHN1YmlkLCBUcmFuc2Fj dGlvbklkIHhpZCwKIAkJCQkJCQkgYm9vbCBmaXJzdF9zZWdtZW50KTsKIHN0YXRpYyB2b2lkIHN0 cmVhbV93cml0ZV9jaGFuZ2UoY2hhciBhY3Rpb24sIFN0cmluZ0luZm8gcyk7CitzdGF0aWMgdm9p ZCBzdHJlYW1fb3Blbl9hbmRfd3JpdGVfY2hhbmdlKFRyYW5zYWN0aW9uSWQgeGlkLCBjaGFyIGFj dGlvbiwgU3RyaW5nSW5mbyBzKTsKIHN0YXRpYyB2b2lkIHN0cmVhbV9jbG9zZV9maWxlKHZvaWQp OwogCiBzdGF0aWMgdm9pZCBzZW5kX2ZlZWRiYWNrKFhMb2dSZWNQdHIgcmVjdnBvcywgYm9vbCBm b3JjZSwgYm9vbCByZXF1ZXN0UmVwbHkpOwogCi1zdGF0aWMgdm9pZCBzdG9yZV9mbHVzaF9wb3Np dGlvbihYTG9nUmVjUHRyIHJlbW90ZV9sc24pOwotCi1zdGF0aWMgdm9pZCBtYXliZV9yZXJlYWRf c3Vic2NyaXB0aW9uKHZvaWQpOwotCiBzdGF0aWMgdm9pZCBEaXNhYmxlU3Vic2NyaXB0aW9uQW5k RXhpdCh2b2lkKTsKIAotLyogcHJvdG90eXBlIG5lZWRlZCBiZWNhdXNlIG9mIHN0cmVhbV9jb21t aXQgKi8KLXN0YXRpYyB2b2lkIGFwcGx5X2Rpc3BhdGNoKFN0cmluZ0luZm8gcyk7Ci0KIHN0YXRp YyB2b2lkIGFwcGx5X2hhbmRsZV9jb21taXRfaW50ZXJuYWwoTG9naWNhbFJlcENvbW1pdERhdGEg KmNvbW1pdF9kYXRhKTsKIHN0YXRpYyB2b2lkIGFwcGx5X2hhbmRsZV9pbnNlcnRfaW50ZXJuYWwo QXBwbHlFeGVjdXRpb25EYXRhICplZGF0YSwKIAkJCQkJCQkJCQkgUmVzdWx0UmVsSW5mbyAqcmVs aW5mbywKQEAgLTM1MiwxOSArNDExLDMyIEBAIHN0YXRpYyB2b2lkIGFwcGx5X2hhbmRsZV90dXBs ZV9yb3V0aW5nKEFwcGx5RXhlY3V0aW9uRGF0YSAqZWRhdGEsCiAvKiBDb21wdXRlIEdJRCBmb3Ig dHdvX3BoYXNlIHRyYW5zYWN0aW9ucyAqLwogc3RhdGljIHZvaWQgVHdvUGhhc2VUcmFuc2FjdGlv bkdpZChPaWQgc3ViaWQsIFRyYW5zYWN0aW9uSWQgeGlkLCBjaGFyICpnaWQsIGludCBzemdpZCk7 CiAKLS8qIENvbW1vbiBzdHJlYW1pbmcgZnVuY3Rpb24gdG8gYXBwbHkgYWxsIHRoZSBzcG9vbGVk IG1lc3NhZ2VzICovCi1zdGF0aWMgdm9pZCBhcHBseV9zcG9vbGVkX21lc3NhZ2VzKFRyYW5zYWN0 aW9uSWQgeGlkLCBYTG9nUmVjUHRyIGxzbik7Ci0KIC8qIEZ1bmN0aW9ucyBmb3Igc2tpcHBpbmcg Y2hhbmdlcyAqLwogc3RhdGljIHZvaWQgbWF5YmVfc3RhcnRfc2tpcHBpbmdfY2hhbmdlcyhYTG9n UmVjUHRyIGZpbmlzaF9sc24pOwogc3RhdGljIHZvaWQgc3RvcF9za2lwcGluZ19jaGFuZ2VzKHZv aWQpOwogc3RhdGljIHZvaWQgY2xlYXJfc3Vic2NyaXB0aW9uX3NraXBfbHNuKFhMb2dSZWNQdHIg ZmluaXNoX2xzbik7CiAKIC8qIEZ1bmN0aW9ucyBmb3IgYXBwbHkgZXJyb3IgY2FsbGJhY2sgKi8K LXN0YXRpYyB2b2lkIGFwcGx5X2Vycm9yX2NhbGxiYWNrKHZvaWQgKmFyZyk7CiBzdGF0aWMgaW5s aW5lIHZvaWQgc2V0X2FwcGx5X2Vycm9yX2NvbnRleHRfeGFjdChUcmFuc2FjdGlvbklkIHhpZCwg WExvZ1JlY1B0ciBsc24pOwogc3RhdGljIGlubGluZSB2b2lkIHJlc2V0X2FwcGx5X2Vycm9yX2Nv bnRleHRfaW5mbyh2b2lkKTsKIAorc3RhdGljIFRyYW5zQXBwbHlBY3Rpb24gZ2V0X3RyYW5zYWN0 aW9uX2FwcGx5X2FjdGlvbihUcmFuc2FjdGlvbklkIHhpZCwKKwkJCQkJCQkJCQkJCQkgUGFyYWxs ZWxBcHBseVdvcmtlckluZm8gKip3aW5mbyk7CisKKy8qCisgKiBSZXR1cm4gdGhlIG5hbWUgb2Yg dGhlIGxvZ2ljYWwgcmVwbGljYXRpb24gd29ya2VyLgorICovCitzdGF0aWMgY29uc3QgY2hhciAq CitnZXRfd29ya2VyX25hbWUodm9pZCkKK3sKKwlpZiAoYW1fdGFibGVzeW5jX3dvcmtlcigpKQor CQlyZXR1cm4gXygibG9naWNhbCByZXBsaWNhdGlvbiB0YWJsZSBzeW5jaHJvbml6YXRpb24gd29y a2VyIik7CisJZWxzZSBpZiAoYW1fcGFyYWxsZWxfYXBwbHlfd29ya2VyKCkpCisJCXJldHVybiBf KCJsb2dpY2FsIHJlcGxpY2F0aW9uIHBhcmFsbGVsIGFwcGx5IHdvcmtlciIpOworCWVsc2UKKwkJ cmV0dXJuIF8oImxvZ2ljYWwgcmVwbGljYXRpb24gYXBwbHkgd29ya2VyIik7Cit9CisKIC8qCiAg KiBGb3JtIHRoZSBvcmlnaW4gbmFtZSBmb3IgdGhlIHN1YnNjcmlwdGlvbi4KICAqCkBAIC0zOTQs MTkgKzQ2Niw0MyBAQCBSZXBsaWNhdGlvbk9yaWdpbk5hbWVGb3JMb2dpY2FsUmVwKE9pZCBzdWJv aWQsIE9pZCByZWxpZCwKICAqCiAgKiBUaGlzIGlzIG1haW5seSBuZWVkZWQgZm9yIGluaXRpYWwg cmVsYXRpb24gZGF0YSBzeW5jIGFzIHRoYXQgcnVucyBpbgogICogc2VwYXJhdGUgd29ya2VyIHBy b2Nlc3MgcnVubmluZyBpbiBwYXJhbGxlbCBhbmQgd2UgbmVlZCBzb21lIHdheSB0byBza2lwCi0g KiBjaGFuZ2VzIGNvbWluZyB0byB0aGUgbWFpbiBhcHBseSB3b3JrZXIgZHVyaW5nIHRoZSBzeW5j IG9mIGEgdGFibGUuCisgKiBjaGFuZ2VzIGNvbWluZyB0byB0aGUgbGVhZGVyIGFwcGx5IHdvcmtl ciBkdXJpbmcgdGhlIHN5bmMgb2YgYSB0YWJsZS4KICAqCiAgKiBOb3RlIHdlIG5lZWQgdG8gZG8g c21hbGxlciBvciBlcXVhbHMgY29tcGFyaXNvbiBmb3IgU1lOQ0RPTkUgc3RhdGUgYmVjYXVzZQog ICogaXQgbWlnaHQgaG9sZCBwb3NpdGlvbiBvZiBlbmQgb2YgaW5pdGlhbCBzbG90IGNvbnNpc3Rl bnQgcG9pbnQgV0FMCiAgKiByZWNvcmQgKyAxIChpZSBzdGFydCBvZiBuZXh0IHJlY29yZCkgYW5k IG5leHQgcmVjb3JkIGNhbiBiZSBDT01NSVQgb2YKICAqIHRyYW5zYWN0aW9uIHdlIGFyZSBub3cg cHJvY2Vzc2luZyAod2hpY2ggaXMgd2hhdCB3ZSBzZXQgcmVtb3RlX2ZpbmFsX2xzbgogICogdG8g aW4gYXBwbHlfaGFuZGxlX2JlZ2luKS4KKyAqCisgKiBOb3RlIHRoYXQgZm9yIHN0cmVhbWluZyB0 cmFuc2FjdGlvbnMgdGhhdCBhcmUgYmVpbmcgYXBwbGllZCBpbiB0aGUgcGFyYWxsZWwKKyAqIGFw cGx5IHdvcmtlciwgd2UgZGlzYWxsb3cgYXBwbHlpbmcgY2hhbmdlcyBpZiB0aGUgdGFyZ2V0IHRh YmxlIGluIHRoZQorICogc3Vic2NyaXB0aW9uIGlzIG5vdCBpbiB0aGUgUkVBRFkgc3RhdGUsIGJl Y2F1c2Ugd2UgY2Fubm90IGRlY2lkZSB3aGV0aGVyIHRvCisgKiBhcHBseSB0aGUgY2hhbmdlIGFz IHdlIHdvbid0IGtub3cgcmVtb3RlX2ZpbmFsX2xzbiBieSB0aGF0IHRpbWUuCisgKgorICogV2Ug YWxyZWFkeSBjaGVja2VkIHRoaXMgaW4gcGFfY2FuX3N0YXJ0KCkgYmVmb3JlIGFzc2lnbmluZyB0 aGUKKyAqIHN0cmVhbWluZyB0cmFuc2FjdGlvbiB0byB0aGUgcGFyYWxsZWwgd29ya2VyLCBidXQg aXQgYWxzbyBuZWVkcyB0byBiZQorICogY2hlY2tlZCBoZXJlIGJlY2F1c2UgaWYgdGhlIHVzZXIg ZXhlY3V0ZXMgQUxURVIgU1VCU0NSSVBUSU9OIC4uLiBSRUZSRVNICisgKiBQVUJMSUNBVElPTiBp biBwYXJhbGxlbCwgdGhlIG5ldyB0YWJsZSBjYW4gYmUgYWRkZWQgdG8gcGdfc3Vic2NyaXB0aW9u X3JlbAorICogd2hpbGUgYXBwbHlpbmcgdGhpcyB0cmFuc2FjdGlvbi4KICAqLwogc3RhdGljIGJv b2wKIHNob3VsZF9hcHBseV9jaGFuZ2VzX2Zvcl9yZWwoTG9naWNhbFJlcFJlbE1hcEVudHJ5ICpy ZWwpCiB7CiAJaWYgKGFtX3RhYmxlc3luY193b3JrZXIoKSkKIAkJcmV0dXJuIE15TG9naWNhbFJl cFdvcmtlci0+cmVsaWQgPT0gcmVsLT5sb2NhbHJlbG9pZDsKKwllbHNlIGlmIChhbV9wYXJhbGxl bF9hcHBseV93b3JrZXIoKSkKKwl7CisJCS8qIFdlIGRvbid0IHN5bmNocm9uaXplIHJlbCdzIHRo YXQgYXJlIGluIHVua25vd24gc3RhdGUuICovCisJCWlmIChyZWwtPnN0YXRlICE9IFNVQlJFTF9T VEFURV9SRUFEWSAmJgorCQkJcmVsLT5zdGF0ZSAhPSBTVUJSRUxfU1RBVEVfVU5LTk9XTikKKwkJ CWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfT0JKRUNUX05PVF9JTl9QUkVS RVFVSVNJVEVfU1RBVEUpLAorCQkJCQkgZXJybXNnKCJsb2dpY2FsIHJlcGxpY2F0aW9uIHBhcmFs bGVsIGFwcGx5IHdvcmtlciBmb3Igc3Vic2NyaXB0aW9uIFwiJXNcIiB3aWxsIHN0b3AiLAorCQkJ CQkJCU15U3Vic2NyaXB0aW9uLT5uYW1lKSwKKwkJCQkJIGVycmRldGFpbCgiQ2Fubm90IGhhbmRs ZSBzdHJlYW1lZCByZXBsaWNhdGlvbiB0cmFuc2FjdGlvbnMgdXNpbmcgcGFyYWxsZWwgYXBwbHkg d29ya2VycyB1bnRpbCBhbGwgdGFibGVzIGhhdmUgYmVlbiBzeW5jaHJvbml6ZWQuIikpKTsKKwor CQlyZXR1cm4gcmVsLT5zdGF0ZSA9PSBTVUJSRUxfU1RBVEVfUkVBRFk7CisJfQogCWVsc2UKIAkJ cmV0dXJuIChyZWwtPnN0YXRlID09IFNVQlJFTF9TVEFURV9SRUFEWSB8fAogCQkJCShyZWwtPnN0 YXRlID09IFNVQlJFTF9TVEFURV9TWU5DRE9ORSAmJgpAQCAtNDUyLDQzICs1NDgsMTEwIEBAIGVu ZF9yZXBsaWNhdGlvbl9zdGVwKHZvaWQpCiB9CiAKIC8qCi0gKiBIYW5kbGUgc3RyZWFtZWQgdHJh bnNhY3Rpb25zLgorICogSGFuZGxlIHN0cmVhbWVkIHRyYW5zYWN0aW9ucyBmb3IgYm90aCB0aGUg bGVhZGVyIGFwcGx5IHdvcmtlciBhbmQgdGhlCisgKiBwYXJhbGxlbCBhcHBseSB3b3JrZXJzLgor ICoKKyAqIEluIHRoZSBzdHJlYW1pbmcgY2FzZSAocmVjZWl2aW5nIGEgYmxvY2sgb2YgdGhlIHN0 cmVhbWVkIHRyYW5zYWN0aW9uKSwgZm9yCisgKiBzZXJpYWxpemUgbW9kZSwgc2ltcGx5IHJlZGly ZWN0IGl0IHRvIGEgZmlsZSBmb3IgdGhlIHByb3BlciB0b3BsZXZlbAorICogdHJhbnNhY3Rpb24s IGFuZCBmb3IgcGFyYWxsZWwgbW9kZSwgdGhlIGxlYWRlciBhcHBseSB3b3JrZXIgd2lsbCBzZW5k IHRoZQorICogY2hhbmdlcyB0byBwYXJhbGxlbCBhcHBseSB3b3JrZXJzIGFuZCB0aGUgcGFyYWxs ZWwgYXBwbHkgd29ya2VyIHdpbGwgZGVmaW5lCisgKiBzYXZlcG9pbnRzIGlmIG5lZWRlZC4gKExP R0lDQUxfUkVQX01TR19SRUxBVElPTiBvciBMT0dJQ0FMX1JFUF9NU0dfVFlQRQorICogbWVzc2Fn ZXMgd2lsbCBiZSBhcHBsaWVkIGJ5IGJvdGggbGVhZGVyIGFwcGx5IHdvcmtlciBhbmQgcGFyYWxs ZWwgYXBwbHkKKyAqIHdvcmtlcnMpLgogICoKLSAqIElmIGluIHN0cmVhbWluZyBtb2RlIChyZWNl aXZpbmcgYSBibG9jayBvZiBzdHJlYW1lZCB0cmFuc2FjdGlvbiksIHdlCi0gKiBzaW1wbHkgcmVk aXJlY3QgaXQgdG8gYSBmaWxlIGZvciB0aGUgcHJvcGVyIHRvcGxldmVsIHRyYW5zYWN0aW9uLgor ICogUmV0dXJucyB0cnVlIGZvciBzdHJlYW1lZCB0cmFuc2FjdGlvbnMgKHdoZW4gdGhlIGNoYW5n ZSBpcyBlaXRoZXIgc2VyaWFsaXplZAorICogdG8gZmlsZSBvciBzZW50IHRvIHBhcmFsbGVsIGFw cGx5IHdvcmtlciksIGZhbHNlIG90aGVyd2lzZSAocmVndWxhciBtb2RlIG9yCisgKiBuZWVkcyB0 byBiZSBwcm9jZXNzZWQgYnkgcGFyYWxsZWwgYXBwbHkgd29ya2VyKS4KICAqCi0gKiBSZXR1cm5z IHRydWUgZm9yIHN0cmVhbWVkIHRyYW5zYWN0aW9ucywgZmFsc2Ugb3RoZXJ3aXNlIChyZWd1bGFy IG1vZGUpLgorICogRXhjZXB0aW9uOiBJZiB0aGUgbWVzc2FnZSBiZWluZyBwcm9jZXNzZWQgaXMg TE9HSUNBTF9SRVBfTVNHX1JFTEFUSU9OCisgKiBvciBMT0dJQ0FMX1JFUF9NU0dfVFlQRSwgcmV0 dXJuIGZhbHNlIGV2ZW4gaWYgdGhlIG1lc3NhZ2UgbmVlZHMgdG8gYmUgc2VudAorICogdG8gYSBw YXJhbGxlbCBhcHBseSB3b3JrZXIuCiAgKi8KIHN0YXRpYyBib29sCiBoYW5kbGVfc3RyZWFtZWRf dHJhbnNhY3Rpb24oTG9naWNhbFJlcE1zZ1R5cGUgYWN0aW9uLCBTdHJpbmdJbmZvIHMpCiB7Ci0J VHJhbnNhY3Rpb25JZCB4aWQ7CisJVHJhbnNhY3Rpb25JZCBjdXJyZW50X3hpZDsKKwlQYXJhbGxl bEFwcGx5V29ya2VySW5mbyAqd2luZm87CisJVHJhbnNBcHBseUFjdGlvbiBhcHBseV9hY3Rpb247 CisJU3RyaW5nSW5mb0RhdGEgb3JpZ2luYWxfbXNnOworCisJYXBwbHlfYWN0aW9uID0gZ2V0X3Ry YW5zYWN0aW9uX2FwcGx5X2FjdGlvbihzdHJlYW1feGlkLCAmd2luZm8pOwogCiAJLyogbm90IGlu IHN0cmVhbWluZyBtb2RlICovCi0JaWYgKCFpbl9zdHJlYW1lZF90cmFuc2FjdGlvbikKKwlpZiAo YXBwbHlfYWN0aW9uID09IFRSQU5TX0xFQURFUl9BUFBMWSkKIAkJcmV0dXJuIGZhbHNlOwogCi0J QXNzZXJ0KHN0cmVhbV9mZCAhPSBOVUxMKTsKIAlBc3NlcnQoVHJhbnNhY3Rpb25JZElzVmFsaWQo c3RyZWFtX3hpZCkpOwogCisJLyoKKwkgKiBUaGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyIG5lZWRz IHRoZSB4aWQgaW4gdGhpcyBtZXNzYWdlIHRvIGRlY2lkZQorCSAqIHdoZXRoZXIgdG8gZGVmaW5l IGEgc2F2ZXBvaW50LCBzbyBzYXZlIHRoZSBvcmlnaW5hbCBtZXNzYWdlIHRoYXQgaGFzCisJICog bm90IG1vdmVkIHRoZSBjdXJzb3IgYWZ0ZXIgdGhlIHhpZC4gV2Ugd2lsbCBzZXJpYWxpemUgdGhp cyBtZXNzYWdlIHRvIGEKKwkgKiBmaWxlIGluIFBBUlRJQUxfU0VSSUFMSVpFIG1vZGUuCisJICov CisJb3JpZ2luYWxfbXNnID0gKnM7CisKIAkvKgogCSAqIFdlIHNob3VsZCBoYXZlIHJlY2VpdmVk IFhJRCBvZiB0aGUgc3VieGFjdCBhcyB0aGUgZmlyc3QgcGFydCBvZiB0aGUKIAkgKiBtZXNzYWdl LCBzbyBleHRyYWN0IGl0LgogCSAqLwotCXhpZCA9IHBxX2dldG1zZ2ludChzLCA0KTsKKwljdXJy ZW50X3hpZCA9IHBxX2dldG1zZ2ludChzLCA0KTsKIAotCWlmICghVHJhbnNhY3Rpb25JZElzVmFs aWQoeGlkKSkKKwlpZiAoIVRyYW5zYWN0aW9uSWRJc1ZhbGlkKGN1cnJlbnRfeGlkKSkKIAkJZXJl cG9ydChFUlJPUiwKIAkJCQkoZXJyY29kZShFUlJDT0RFX1BST1RPQ09MX1ZJT0xBVElPTiksCiAJ CQkJIGVycm1zZ19pbnRlcm5hbCgiaW52YWxpZCB0cmFuc2FjdGlvbiBJRCBpbiBzdHJlYW1lZCBy ZXBsaWNhdGlvbiB0cmFuc2FjdGlvbiIpKSk7CiAKLQkvKiBBZGQgdGhlIG5ldyBzdWJ4YWN0IHRv IHRoZSBhcnJheSAodW5sZXNzIGFscmVhZHkgdGhlcmUpLiAqLwotCXN1YnhhY3RfaW5mb19hZGQo eGlkKTsKKwlzd2l0Y2ggKGFwcGx5X2FjdGlvbikKKwl7CisJCWNhc2UgVFJBTlNfTEVBREVSX1NF UklBTElaRToKKwkJCUFzc2VydChzdHJlYW1fZmQpOwogCi0JLyogd3JpdGUgdGhlIGNoYW5nZSB0 byB0aGUgY3VycmVudCBmaWxlICovCi0Jc3RyZWFtX3dyaXRlX2NoYW5nZShhY3Rpb24sIHMpOwor CQkJLyogQWRkIHRoZSBuZXcgc3VieGFjdCB0byB0aGUgYXJyYXkgKHVubGVzcyBhbHJlYWR5IHRo ZXJlKS4gKi8KKwkJCXN1YnhhY3RfaW5mb19hZGQoY3VycmVudF94aWQpOworCisJCQkvKiBXcml0 ZSB0aGUgY2hhbmdlIHRvIHRoZSBjdXJyZW50IGZpbGUgKi8KKwkJCXN0cmVhbV93cml0ZV9jaGFu Z2UoYWN0aW9uLCBzKTsKKwkJCXJldHVybiB0cnVlOworCisJCWNhc2UgVFJBTlNfTEVBREVSX1NF TkRfVE9fUEFSQUxMRUw6CisJCQlBc3NlcnQod2luZm8pOworCisJCQkvKgorCQkJICogWFhYIFRo ZSBwdWJsaXNoZXIgc2lkZSBkb2Vzbid0IGFsd2F5cyBzZW5kIHJlbGF0aW9uL3R5cGUgdXBkYXRl CisJCQkgKiBtZXNzYWdlcyBhZnRlciB0aGUgc3RyZWFtaW5nIHRyYW5zYWN0aW9uLCBzbyBhbHNv IHVwZGF0ZSB0aGUKKwkJCSAqIHJlbGF0aW9uL3R5cGUgaW4gbGVhZGVyIGFwcGx5IHdvcmtlci4g U2VlIGZ1bmN0aW9uCisJCQkgKiBjbGVhbnVwX3JlbF9zeW5jX2NhY2hlLgorCQkJICovCisJCQlp ZiAocGFfc2VuZF9kYXRhKHdpbmZvLCBzLT5sZW4sIHMtPmRhdGEpKQorCQkJCXJldHVybiAoYWN0 aW9uICE9IExPR0lDQUxfUkVQX01TR19SRUxBVElPTiAmJgorCQkJCQkJYWN0aW9uICE9IExPR0lD QUxfUkVQX01TR19UWVBFKTsKKworCQkJLyoKKwkJCSAqIFN3aXRjaCB0byBzZXJpYWxpemUgbW9k ZSB3aGVuIHdlIGFyZSBub3QgYWJsZSB0byBzZW5kIHRoZQorCQkJICogY2hhbmdlIHRvIHBhcmFs bGVsIGFwcGx5IHdvcmtlci4KKwkJCSAqLworCQkJcGFfc3dpdGNoX3RvX3BhcnRpYWxfc2VyaWFs aXplKHdpbmZvLCBmYWxzZSk7CisKKwkJCS8qIGZhbGwgdGhyb3VnaCAqLworCQljYXNlIFRSQU5T X0xFQURFUl9QQVJUSUFMX1NFUklBTElaRToKKwkJCXN0cmVhbV93cml0ZV9jaGFuZ2UoYWN0aW9u LCAmb3JpZ2luYWxfbXNnKTsKIAotCXJldHVybiB0cnVlOworCQkJLyogU2FtZSByZWFzb24gYXMg VFJBTlNfTEVBREVSX1NFTkRfVE9fUEFSQUxMRUwgY2FzZS4gKi8KKwkJCXJldHVybiAoYWN0aW9u ICE9IExPR0lDQUxfUkVQX01TR19SRUxBVElPTiAmJgorCQkJCQlhY3Rpb24gIT0gTE9HSUNBTF9S RVBfTVNHX1RZUEUpOworCisJCWNhc2UgVFJBTlNfUEFSQUxMRUxfQVBQTFk6CisJCQlwYXJhbGxl bF9zdHJlYW1fbmNoYW5nZXMgKz0gMTsKKworCQkJLyogRGVmaW5lIGEgc2F2ZXBvaW50IGZvciBh IHN1YnhhY3QgaWYgbmVlZGVkLiAqLworCQkJcGFfc3RhcnRfc3VidHJhbnMoY3VycmVudF94aWQs IHN0cmVhbV94aWQpOworCQkJcmV0dXJuIGZhbHNlOworCisJCWRlZmF1bHQ6CisJCQlBc3NlcnQo ZmFsc2UpOworCQkJcmV0dXJuIGZhbHNlOwkJLyogc2lsZW5jZSBjb21waWxlciB3YXJuaW5nICov CisJfQogfQogCiAvKgpAQCAtOTI2LDggKzEwODksMTEgQEAgYXBwbHlfaGFuZGxlX3ByZXBhcmVf aW50ZXJuYWwoTG9naWNhbFJlcFByZXBhcmVkVHhuRGF0YSAqcHJlcGFyZV9kYXRhKQogCSAqIEJl Z2luVHJhbnNhY3Rpb25CbG9jayBpcyBuZWNlc3NhcnkgdG8gYmFsYW5jZSB0aGUgRW5kVHJhbnNh Y3Rpb25CbG9jawogCSAqIGNhbGxlZCB3aXRoaW4gdGhlIFByZXBhcmVUcmFuc2FjdGlvbkJsb2Nr IGJlbG93LgogCSAqLwotCUJlZ2luVHJhbnNhY3Rpb25CbG9jaygpOwotCUNvbW1pdFRyYW5zYWN0 aW9uQ29tbWFuZCgpOyAvKiBDb21wbGV0ZXMgdGhlIHByZWNlZGluZyBCZWdpbiBjb21tYW5kLiAq LworCWlmICghSXNUcmFuc2FjdGlvbkJsb2NrKCkpCisJeworCQlCZWdpblRyYW5zYWN0aW9uQmxv Y2soKTsKKwkJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7IC8qIENvbXBsZXRlcyB0aGUgcHJl Y2VkaW5nIEJlZ2luIGNvbW1hbmQuICovCisJfQogCiAJLyoKIAkgKiBVcGRhdGUgb3JpZ2luIHN0 YXRlIHNvIHdlIGNhbiByZXN0YXJ0IHN0cmVhbWluZyBmcm9tIGNvcnJlY3QgcG9zaXRpb24KQEAg LTk3NCw3ICsxMTQwLDcgQEAgYXBwbHlfaGFuZGxlX3ByZXBhcmUoU3RyaW5nSW5mbyBzKQogCUNv bW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOwogCXBnc3RhdF9yZXBvcnRfc3RhdChmYWxzZSk7CiAK LQlzdG9yZV9mbHVzaF9wb3NpdGlvbihwcmVwYXJlX2RhdGEuZW5kX2xzbik7CisJc3RvcmVfZmx1 c2hfcG9zaXRpb24ocHJlcGFyZV9kYXRhLmVuZF9sc24sIFhhY3RMYXN0Q29tbWl0RW5kKTsKIAog CWluX3JlbW90ZV90cmFuc2FjdGlvbiA9IGZhbHNlOwogCkBAIC05OTYsNiArMTE2MiwxMiBAQCBh cHBseV9oYW5kbGVfcHJlcGFyZShTdHJpbmdJbmZvIHMpCiAKIC8qCiAgKiBIYW5kbGUgYSBDT01N SVQgUFJFUEFSRUQgb2YgYSBwcmV2aW91c2x5IFBSRVBBUkVEIHRyYW5zYWN0aW9uLgorICoKKyAq IE5vdGUgdGhhdCB3ZSBkb24ndCBuZWVkIHRvIHdhaXQgaGVyZSBpZiB0aGUgdHJhbnNhY3Rpb24g d2FzIHByZXBhcmVkIGluIGEKKyAqIHBhcmFsbGVsIGFwcGx5IHdvcmtlci4gSW4gdGhhdCBjYXNl LCB3ZSBoYXZlIGFscmVhZHkgd2FpdGVkIGZvciB0aGUgcHJlcGFyZQorICogdG8gZmluaXNoIGlu IGFwcGx5X2hhbmRsZV9zdHJlYW1fcHJlcGFyZSgpIHdoaWNoIHdpbGwgZW5zdXJlIGFsbCB0aGUK KyAqIG9wZXJhdGlvbnMgaW4gdGhhdCB0cmFuc2FjdGlvbiBoYXZlIGhhcHBlbmVkIGluIHRoZSBz dWJzY3JpYmVyLCBzbyBubworICogY29uY3VycmVudCB0cmFuc2FjdGlvbiBjYW4gY2F1c2UgZGVh ZGxvY2sgb3IgdHJhbnNhY3Rpb24gZGVwZW5kZW5jeSBpc3N1ZXMuCiAgKi8KIHN0YXRpYyB2b2lk CiBhcHBseV9oYW5kbGVfY29tbWl0X3ByZXBhcmVkKFN0cmluZ0luZm8gcykKQEAgLTEwMjUsNyAr MTE5Nyw3IEBAIGFwcGx5X2hhbmRsZV9jb21taXRfcHJlcGFyZWQoU3RyaW5nSW5mbyBzKQogCUNv bW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOwogCXBnc3RhdF9yZXBvcnRfc3RhdChmYWxzZSk7CiAK LQlzdG9yZV9mbHVzaF9wb3NpdGlvbihwcmVwYXJlX2RhdGEuZW5kX2xzbik7CisJc3RvcmVfZmx1 c2hfcG9zaXRpb24ocHJlcGFyZV9kYXRhLmVuZF9sc24sIFhhY3RMYXN0Q29tbWl0RW5kKTsKIAlp bl9yZW1vdGVfdHJhbnNhY3Rpb24gPSBmYWxzZTsKIAogCS8qIFByb2Nlc3MgYW55IHRhYmxlcyB0 aGF0IGFyZSBiZWluZyBzeW5jaHJvbml6ZWQgaW4gcGFyYWxsZWwuICovCkBAIC0xMDM5LDYgKzEy MTEsMTIgQEAgYXBwbHlfaGFuZGxlX2NvbW1pdF9wcmVwYXJlZChTdHJpbmdJbmZvIHMpCiAKIC8q CiAgKiBIYW5kbGUgYSBST0xMQkFDSyBQUkVQQVJFRCBvZiBhIHByZXZpb3VzbHkgUFJFUEFSRUQg VFJBTlNBQ1RJT04uCisgKgorICogTm90ZSB0aGF0IHdlIGRvbid0IG5lZWQgdG8gd2FpdCBoZXJl IGlmIHRoZSB0cmFuc2FjdGlvbiB3YXMgcHJlcGFyZWQgaW4gYQorICogcGFyYWxsZWwgYXBwbHkg d29ya2VyLiBJbiB0aGF0IGNhc2UsIHdlIGhhdmUgYWxyZWFkeSB3YWl0ZWQgZm9yIHRoZSBwcmVw YXJlCisgKiB0byBmaW5pc2ggaW4gYXBwbHlfaGFuZGxlX3N0cmVhbV9wcmVwYXJlKCkgd2hpY2gg d2lsbCBlbnN1cmUgYWxsIHRoZQorICogb3BlcmF0aW9ucyBpbiB0aGF0IHRyYW5zYWN0aW9uIGhh dmUgaGFwcGVuZWQgaW4gdGhlIHN1YnNjcmliZXIsIHNvIG5vCisgKiBjb25jdXJyZW50IHRyYW5z YWN0aW9uIGNhbiBjYXVzZSBkZWFkbG9jayBvciB0cmFuc2FjdGlvbiBkZXBlbmRlbmN5IGlzc3Vl cy4KICAqLwogc3RhdGljIHZvaWQKIGFwcGx5X2hhbmRsZV9yb2xsYmFja19wcmVwYXJlZChTdHJp bmdJbmZvIHMpCkBAIC0xMDgwLDcgKzEyNTgsNyBAQCBhcHBseV9oYW5kbGVfcm9sbGJhY2tfcHJl cGFyZWQoU3RyaW5nSW5mbyBzKQogCiAJcGdzdGF0X3JlcG9ydF9zdGF0KGZhbHNlKTsKIAotCXN0 b3JlX2ZsdXNoX3Bvc2l0aW9uKHJvbGxiYWNrX2RhdGEucm9sbGJhY2tfZW5kX2xzbik7CisJc3Rv cmVfZmx1c2hfcG9zaXRpb24ocm9sbGJhY2tfZGF0YS5yb2xsYmFja19lbmRfbHNuLCBYYWN0TGFz dENvbW1pdEVuZCk7CiAJaW5fcmVtb3RlX3RyYW5zYWN0aW9uID0gZmFsc2U7CiAKIAkvKiBQcm9j ZXNzIGFueSB0YWJsZXMgdGhhdCBhcmUgYmVpbmcgc3luY2hyb25pemVkIGluIHBhcmFsbGVsLiAq LwpAQCAtMTA5MiwxNSArMTI3MCwxNiBAQCBhcHBseV9oYW5kbGVfcm9sbGJhY2tfcHJlcGFyZWQo U3RyaW5nSW5mbyBzKQogCiAvKgogICogSGFuZGxlIFNUUkVBTSBQUkVQQVJFLgotICoKLSAqIExv Z2ljIGlzIGluIHR3byBwYXJ0czoKLSAqIDEuIFJlcGxheSBhbGwgdGhlIHNwb29sZWQgb3BlcmF0 aW9ucwotICogMi4gTWFyayB0aGUgdHJhbnNhY3Rpb24gYXMgcHJlcGFyZWQKICAqLwogc3RhdGlj IHZvaWQKIGFwcGx5X2hhbmRsZV9zdHJlYW1fcHJlcGFyZShTdHJpbmdJbmZvIHMpCiB7CiAJTG9n aWNhbFJlcFByZXBhcmVkVHhuRGF0YSBwcmVwYXJlX2RhdGE7CisJUGFyYWxsZWxBcHBseVdvcmtl ckluZm8gKndpbmZvOworCVRyYW5zQXBwbHlBY3Rpb24gYXBwbHlfYWN0aW9uOworCisJLyogU2F2 ZSB0aGUgbWVzc2FnZSBiZWZvcmUgaXQgaXMgY29uc3VtZWQuICovCisJU3RyaW5nSW5mb0RhdGEg b3JpZ2luYWxfbXNnID0gKnM7CiAKIAlpZiAoaW5fc3RyZWFtZWRfdHJhbnNhY3Rpb24pCiAJCWVy ZXBvcnQoRVJST1IsCkBAIC0xMTE2LDI0ICsxMjk1LDk4IEBAIGFwcGx5X2hhbmRsZV9zdHJlYW1f cHJlcGFyZShTdHJpbmdJbmZvIHMpCiAJbG9naWNhbHJlcF9yZWFkX3N0cmVhbV9wcmVwYXJlKHMs ICZwcmVwYXJlX2RhdGEpOwogCXNldF9hcHBseV9lcnJvcl9jb250ZXh0X3hhY3QocHJlcGFyZV9k YXRhLnhpZCwgcHJlcGFyZV9kYXRhLnByZXBhcmVfbHNuKTsKIAotCWVsb2coREVCVUcxLCAicmVj ZWl2ZWQgcHJlcGFyZSBmb3Igc3RyZWFtZWQgdHJhbnNhY3Rpb24gJXUiLCBwcmVwYXJlX2RhdGEu eGlkKTsKKwlhcHBseV9hY3Rpb24gPSBnZXRfdHJhbnNhY3Rpb25fYXBwbHlfYWN0aW9uKHByZXBh cmVfZGF0YS54aWQsICZ3aW5mbyk7CiAKLQkvKiBSZXBsYXkgYWxsIHRoZSBzcG9vbGVkIG9wZXJh dGlvbnMuICovCi0JYXBwbHlfc3Bvb2xlZF9tZXNzYWdlcyhwcmVwYXJlX2RhdGEueGlkLCBwcmVw YXJlX2RhdGEucHJlcGFyZV9sc24pOworCXN3aXRjaCAoYXBwbHlfYWN0aW9uKQorCXsKKwkJY2Fz ZSBUUkFOU19MRUFERVJfU0VSSUFMSVpFOgogCi0JLyogTWFyayB0aGUgdHJhbnNhY3Rpb24gYXMg cHJlcGFyZWQuICovCi0JYXBwbHlfaGFuZGxlX3ByZXBhcmVfaW50ZXJuYWwoJnByZXBhcmVfZGF0 YSk7CisJCQkvKgorCQkJICogVGhlIHRyYW5zYWN0aW9uIGhhcyBiZWVuIHNlcmlhbGl6ZWQgdG8g ZmlsZSwgc28gcmVwbGF5IGFsbCB0aGUKKwkJCSAqIHNwb29sZWQgb3BlcmF0aW9ucy4KKwkJCSAq LworCQkJYXBwbHlfc3Bvb2xlZF9tZXNzYWdlcyhNeUxvZ2ljYWxSZXBXb3JrZXItPnN0cmVhbV9m aWxlc2V0LAorCQkJCQkJCQkgICBwcmVwYXJlX2RhdGEueGlkLCBwcmVwYXJlX2RhdGEucHJlcGFy ZV9sc24pOwogCi0JQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CisJCQkvKiBNYXJrIHRoZSB0 cmFuc2FjdGlvbiBhcyBwcmVwYXJlZC4gKi8KKwkJCWFwcGx5X2hhbmRsZV9wcmVwYXJlX2ludGVy bmFsKCZwcmVwYXJlX2RhdGEpOwogCi0JcGdzdGF0X3JlcG9ydF9zdGF0KGZhbHNlKTsKKwkJCUNv bW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOwogCi0Jc3RvcmVfZmx1c2hfcG9zaXRpb24ocHJlcGFy ZV9kYXRhLmVuZF9sc24pOworCQkJc3RvcmVfZmx1c2hfcG9zaXRpb24ocHJlcGFyZV9kYXRhLmVu ZF9sc24sIFhhY3RMYXN0Q29tbWl0RW5kKTsKIAotCWluX3JlbW90ZV90cmFuc2FjdGlvbiA9IGZh bHNlOworCQkJaW5fcmVtb3RlX3RyYW5zYWN0aW9uID0gZmFsc2U7CisKKwkJCS8qIFVubGluayB0 aGUgZmlsZXMgd2l0aCBzZXJpYWxpemVkIGNoYW5nZXMgYW5kIHN1YnhhY3QgaW5mby4gKi8KKwkJ CXN0cmVhbV9jbGVhbnVwX2ZpbGVzKE15TG9naWNhbFJlcFdvcmtlci0+c3ViaWQsIHByZXBhcmVf ZGF0YS54aWQpOworCisJCQllbG9nKERFQlVHMSwgImZpbmlzaGVkIHByb2Nlc3NpbmcgdGhlIFNU UkVBTSBQUkVQQVJFIGNvbW1hbmQiKTsKKwkJCWJyZWFrOwogCi0JLyogdW5saW5rIHRoZSBmaWxl cyB3aXRoIHNlcmlhbGl6ZWQgY2hhbmdlcyBhbmQgc3VieGFjdCBpbmZvLiAqLwotCXN0cmVhbV9j bGVhbnVwX2ZpbGVzKE15TG9naWNhbFJlcFdvcmtlci0+c3ViaWQsIHByZXBhcmVfZGF0YS54aWQp OworCQljYXNlIFRSQU5TX0xFQURFUl9TRU5EX1RPX1BBUkFMTEVMOgorCQkJQXNzZXJ0KHdpbmZv KTsKKworCQkJaWYgKHBhX3NlbmRfZGF0YSh3aW5mbywgcy0+bGVuLCBzLT5kYXRhKSkKKwkJCXsK KwkJCQkvKiBGaW5pc2ggcHJvY2Vzc2luZyB0aGUgc3RyZWFtaW5nIHRyYW5zYWN0aW9uLiAqLwor CQkJCXBhX3hhY3RfZmluaXNoKHdpbmZvLCBwcmVwYXJlX2RhdGEuZW5kX2xzbik7CisJCQkJYnJl YWs7CisJCQl9CisKKwkJCS8qCisJCQkgKiBTd2l0Y2ggdG8gc2VyaWFsaXplIG1vZGUgd2hlbiB3 ZSBhcmUgbm90IGFibGUgdG8gc2VuZCB0aGUKKwkJCSAqIGNoYW5nZSB0byBwYXJhbGxlbCBhcHBs eSB3b3JrZXIuCisJCQkgKi8KKwkJCXBhX3N3aXRjaF90b19wYXJ0aWFsX3NlcmlhbGl6ZSh3aW5m bywgdHJ1ZSk7CisKKwkJCS8qIGZhbGwgdGhyb3VnaCAqLworCQljYXNlIFRSQU5TX0xFQURFUl9Q QVJUSUFMX1NFUklBTElaRToKKwkJCUFzc2VydCh3aW5mbyk7CisKKwkJCXN0cmVhbV9vcGVuX2Fu ZF93cml0ZV9jaGFuZ2UocHJlcGFyZV9kYXRhLnhpZCwKKwkJCQkJCQkJCQkgTE9HSUNBTF9SRVBf TVNHX1NUUkVBTV9QUkVQQVJFLAorCQkJCQkJCQkJCSAmb3JpZ2luYWxfbXNnKTsKKworCQkJcGFf c2V0X2ZpbGVzZXRfc3RhdGUod2luZm8tPnNoYXJlZCwgRlNfU0VSSUFMSVpFX0RPTkUpOworCisJ CQkvKiBGaW5pc2ggcHJvY2Vzc2luZyB0aGUgc3RyZWFtaW5nIHRyYW5zYWN0aW9uLiAqLworCQkJ cGFfeGFjdF9maW5pc2god2luZm8sIHByZXBhcmVfZGF0YS5lbmRfbHNuKTsKKwkJCWJyZWFrOwor CisJCWNhc2UgVFJBTlNfUEFSQUxMRUxfQVBQTFk6CisKKwkJCS8qCisJCQkgKiBJZiB0aGUgcGFy YWxsZWwgYXBwbHkgd29ya2VyIGlzIGFwcGx5aW5nIHNwb29sZWQgbWVzc2FnZXMgdGhlbgorCQkJ ICogY2xvc2UgdGhlIGZpbGUgYmVmb3JlIHByZXBhcmluZy4KKwkJCSAqLworCQkJaWYgKHN0cmVh bV9mZCkKKwkJCQlzdHJlYW1fY2xvc2VfZmlsZSgpOworCisJCQliZWdpbl9yZXBsaWNhdGlvbl9z dGVwKCk7CisKKwkJCS8qIE1hcmsgdGhlIHRyYW5zYWN0aW9uIGFzIHByZXBhcmVkLiAqLworCQkJ YXBwbHlfaGFuZGxlX3ByZXBhcmVfaW50ZXJuYWwoJnByZXBhcmVfZGF0YSk7CisKKwkJCWVuZF9y ZXBsaWNhdGlvbl9zdGVwKCk7CisKKwkJCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCisJ CQlNeVBhcmFsbGVsU2hhcmVkLT5sYXN0X2NvbW1pdF9lbmQgPSBYYWN0TGFzdENvbW1pdEVuZDsK KworCQkJcGFfc2V0X3hhY3Rfc3RhdGUoTXlQYXJhbGxlbFNoYXJlZCwgUEFSQUxMRUxfVFJBTlNf RklOSVNIRUQpOworCQkJcGFfdW5sb2NrX3RyYW5zYWN0aW9uKE15UGFyYWxsZWxTaGFyZWQtPnhp ZCwgQWNjZXNzRXhjbHVzaXZlTG9jayk7CisKKwkJCXBhX3Jlc2V0X3N1YnRyYW5zKCk7CisKKwkJ CWVsb2coREVCVUcxLCAiZmluaXNoZWQgcHJvY2Vzc2luZyB0aGUgU1RSRUFNIFBSRVBBUkUgY29t bWFuZCIpOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCUFzc2VydChmYWxzZSk7CisJCQli cmVhazsKKwl9CisKKwlwZ3N0YXRfcmVwb3J0X3N0YXQoZmFsc2UpOwogCiAJLyogUHJvY2VzcyBh bnkgdGFibGVzIHRoYXQgYXJlIGJlaW5nIHN5bmNocm9uaXplZCBpbiBwYXJhbGxlbC4gKi8KIAlw cm9jZXNzX3N5bmNpbmdfdGFibGVzKHByZXBhcmVfZGF0YS5lbmRfbHNuKTsKQEAgLTExNzAsNiAr MTQyMyw0NyBAQCBhcHBseV9oYW5kbGVfb3JpZ2luKFN0cmluZ0luZm8gcykKIAkJCQkgZXJybXNn X2ludGVybmFsKCJPUklHSU4gbWVzc2FnZSBzZW50IG91dCBvZiBvcmRlciIpKSk7CiB9CiAKKy8q CisgKiBJbml0aWFsaXplIGZpbGVzZXQgKGlmIG5vdCBhbHJlYWR5IGRvbmUpLgorICoKKyAqIENy ZWF0ZSBhIG5ldyBmaWxlIHdoZW4gZmlyc3Rfc2VnbWVudCBpcyB0cnVlLCBvdGhlcndpc2Ugb3Bl biB0aGUgZXhpc3RpbmcKKyAqIGZpbGUuCisgKi8KK3ZvaWQKK3N0cmVhbV9zdGFydF9pbnRlcm5h bChUcmFuc2FjdGlvbklkIHhpZCwgYm9vbCBmaXJzdF9zZWdtZW50KQoreworCWJlZ2luX3JlcGxp Y2F0aW9uX3N0ZXAoKTsKKworCS8qCisJICogSW5pdGlhbGl6ZSB0aGUgd29ya2VyJ3Mgc3RyZWFt X2ZpbGVzZXQgaWYgd2UgaGF2ZW4ndCB5ZXQuIFRoaXMgd2lsbCBiZQorCSAqIHVzZWQgZm9yIHRo ZSBlbnRpcmUgZHVyYXRpb24gb2YgdGhlIHdvcmtlciBzbyBjcmVhdGUgaXQgaW4gYSBwZXJtYW5l bnQKKwkgKiBjb250ZXh0LiBXZSBjcmVhdGUgdGhpcyBvbiB0aGUgdmVyeSBmaXJzdCBzdHJlYW1p bmcgbWVzc2FnZSBmcm9tIGFueQorCSAqIHRyYW5zYWN0aW9uIGFuZCB0aGVuIHVzZSBpdCBmb3Ig dGhpcyBhbmQgb3RoZXIgc3RyZWFtaW5nIHRyYW5zYWN0aW9ucy4KKwkgKiBOb3csIHdlIGNvdWxk IGNyZWF0ZSBhIGZpbGVzZXQgYXQgdGhlIHN0YXJ0IG9mIHRoZSB3b3JrZXIgYXMgd2VsbCBidXQK KwkgKiB0aGVuIHdlIHdvbid0IGJlIHN1cmUgdGhhdCBpdCB3aWxsIGV2ZXIgYmUgdXNlZC4KKwkg Ki8KKwlpZiAoIU15TG9naWNhbFJlcFdvcmtlci0+c3RyZWFtX2ZpbGVzZXQpCisJeworCQlNZW1v cnlDb250ZXh0IG9sZGN0eDsKKworCQlvbGRjdHggPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oQXBw bHlDb250ZXh0KTsKKworCQlNeUxvZ2ljYWxSZXBXb3JrZXItPnN0cmVhbV9maWxlc2V0ID0gcGFs bG9jKHNpemVvZihGaWxlU2V0KSk7CisJCUZpbGVTZXRJbml0KE15TG9naWNhbFJlcFdvcmtlci0+ c3RyZWFtX2ZpbGVzZXQpOworCisJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjdHgpOworCX0K KworCS8qIE9wZW4gdGhlIHNwb29sIGZpbGUgZm9yIHRoaXMgdHJhbnNhY3Rpb24uICovCisJc3Ry ZWFtX29wZW5fZmlsZShNeUxvZ2ljYWxSZXBXb3JrZXItPnN1YmlkLCB4aWQsIGZpcnN0X3NlZ21l bnQpOworCisJLyogSWYgdGhpcyBpcyBub3QgdGhlIGZpcnN0IHNlZ21lbnQsIG9wZW4gZXhpc3Rp bmcgc3VieGFjdCBmaWxlLiAqLworCWlmICghZmlyc3Rfc2VnbWVudCkKKwkJc3VieGFjdF9pbmZv X3JlYWQoTXlMb2dpY2FsUmVwV29ya2VyLT5zdWJpZCwgeGlkKTsKKworCWVuZF9yZXBsaWNhdGlv bl9zdGVwKCk7Cit9CisKIC8qCiAgKiBIYW5kbGUgU1RSRUFNIFNUQVJUIG1lc3NhZ2UuCiAgKi8K QEAgLTExNzcsMjEgKzE0NzEsMTcgQEAgc3RhdGljIHZvaWQKIGFwcGx5X2hhbmRsZV9zdHJlYW1f c3RhcnQoU3RyaW5nSW5mbyBzKQogewogCWJvb2wJCWZpcnN0X3NlZ21lbnQ7CisJUGFyYWxsZWxB cHBseVdvcmtlckluZm8gKndpbmZvOworCVRyYW5zQXBwbHlBY3Rpb24gYXBwbHlfYWN0aW9uOwor CisJLyogU2F2ZSB0aGUgbWVzc2FnZSBiZWZvcmUgaXQgaXMgY29uc3VtZWQuICovCisJU3RyaW5n SW5mb0RhdGEgb3JpZ2luYWxfbXNnID0gKnM7CiAKIAlpZiAoaW5fc3RyZWFtZWRfdHJhbnNhY3Rp b24pCiAJCWVyZXBvcnQoRVJST1IsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9QUk9UT0NPTF9WSU9M QVRJT04pLAogCQkJCSBlcnJtc2dfaW50ZXJuYWwoImR1cGxpY2F0ZSBTVFJFQU0gU1RBUlQgbWVz c2FnZSIpKSk7CiAKLQkvKgotCSAqIFN0YXJ0IGEgdHJhbnNhY3Rpb24gb24gc3RyZWFtIHN0YXJ0 LCB0aGlzIHRyYW5zYWN0aW9uIHdpbGwgYmUgY29tbWl0dGVkCi0JICogb24gdGhlIHN0cmVhbSBz dG9wIHVubGVzcyBpdCBpcyBhIHRhYmxlc3luYyB3b3JrZXIgaW4gd2hpY2ggY2FzZSBpdAotCSAq IHdpbGwgYmUgY29tbWl0dGVkIGFmdGVyIHByb2Nlc3NpbmcgYWxsIHRoZSBtZXNzYWdlcy4gV2Ug bmVlZCB0aGUKLQkgKiB0cmFuc2FjdGlvbiBmb3IgaGFuZGxpbmcgdGhlIGJ1ZmZpbGUsIHVzZWQg Zm9yIHNlcmlhbGl6aW5nIHRoZQotCSAqIHN0cmVhbWluZyBkYXRhIGFuZCBzdWJ4YWN0IGluZm8u Ci0JICovCi0JYmVnaW5fcmVwbGljYXRpb25fc3RlcCgpOwotCiAJLyogbm90aWZ5IGhhbmRsZSBt ZXRob2RzIHdlJ3JlIHByb2Nlc3NpbmcgYSByZW1vdGUgdHJhbnNhY3Rpb24gKi8KIAlpbl9zdHJl YW1lZF90cmFuc2FjdGlvbiA9IHRydWU7CiAKQEAgLTEyMDUsNTQgKzE0OTUsMTEzIEBAIGFwcGx5 X2hhbmRsZV9zdHJlYW1fc3RhcnQoU3RyaW5nSW5mbyBzKQogCiAJc2V0X2FwcGx5X2Vycm9yX2Nv bnRleHRfeGFjdChzdHJlYW1feGlkLCBJbnZhbGlkWExvZ1JlY1B0cik7CiAKLQkvKgotCSAqIElu aXRpYWxpemUgdGhlIHdvcmtlcidzIHN0cmVhbV9maWxlc2V0IGlmIHdlIGhhdmVuJ3QgeWV0LiBU aGlzIHdpbGwgYmUKLQkgKiB1c2VkIGZvciB0aGUgZW50aXJlIGR1cmF0aW9uIG9mIHRoZSB3b3Jr ZXIgc28gY3JlYXRlIGl0IGluIGEgcGVybWFuZW50Ci0JICogY29udGV4dC4gV2UgY3JlYXRlIHRo aXMgb24gdGhlIHZlcnkgZmlyc3Qgc3RyZWFtaW5nIG1lc3NhZ2UgZnJvbSBhbnkKLQkgKiB0cmFu c2FjdGlvbiBhbmQgdGhlbiB1c2UgaXQgZm9yIHRoaXMgYW5kIG90aGVyIHN0cmVhbWluZyB0cmFu c2FjdGlvbnMuCi0JICogTm93LCB3ZSBjb3VsZCBjcmVhdGUgYSBmaWxlc2V0IGF0IHRoZSBzdGFy dCBvZiB0aGUgd29ya2VyIGFzIHdlbGwgYnV0Ci0JICogdGhlbiB3ZSB3b24ndCBiZSBzdXJlIHRo YXQgaXQgd2lsbCBldmVyIGJlIHVzZWQuCi0JICovCi0JaWYgKE15TG9naWNhbFJlcFdvcmtlci0+ c3RyZWFtX2ZpbGVzZXQgPT0gTlVMTCkKKwkvKiBUcnkgdG8gYWxsb2NhdGUgYSB3b3JrZXIgZm9y IHRoZSBzdHJlYW1pbmcgdHJhbnNhY3Rpb24uICovCisJaWYgKGZpcnN0X3NlZ21lbnQpCisJCXBh X2FsbG9jYXRlX3dvcmtlcihzdHJlYW1feGlkKTsKKworCWFwcGx5X2FjdGlvbiA9IGdldF90cmFu c2FjdGlvbl9hcHBseV9hY3Rpb24oc3RyZWFtX3hpZCwgJndpbmZvKTsKKworCXN3aXRjaCAoYXBw bHlfYWN0aW9uKQogCXsKLQkJTWVtb3J5Q29udGV4dCBvbGRjdHg7CisJCWNhc2UgVFJBTlNfTEVB REVSX1NFUklBTElaRToKIAotCQlvbGRjdHggPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oQXBwbHlD b250ZXh0KTsKKwkJCS8qCisJCQkgKiBGdW5jdGlvbiBzdHJlYW1fc3RhcnRfaW50ZXJuYWwgc3Rh cnRzIGEgdHJhbnNhY3Rpb24uIFRoaXMKKwkJCSAqIHRyYW5zYWN0aW9uIHdpbGwgYmUgY29tbWl0 dGVkIG9uIHRoZSBzdHJlYW0gc3RvcCB1bmxlc3MgaXQgaXMgYQorCQkJICogdGFibGVzeW5jIHdv cmtlciBpbiB3aGljaCBjYXNlIGl0IHdpbGwgYmUgY29tbWl0dGVkIGFmdGVyCisJCQkgKiBwcm9j ZXNzaW5nIGFsbCB0aGUgbWVzc2FnZXMuIFdlIG5lZWQgdGhpcyB0cmFuc2FjdGlvbiBmb3IKKwkJ CSAqIGhhbmRsaW5nIHRoZSBCdWZGaWxlLCB1c2VkIGZvciBzZXJpYWxpemluZyB0aGUgc3RyZWFt aW5nIGRhdGEKKwkJCSAqIGFuZCBzdWJ4YWN0IGluZm8uCisJCQkgKi8KKwkJCXN0cmVhbV9zdGFy dF9pbnRlcm5hbChzdHJlYW1feGlkLCBmaXJzdF9zZWdtZW50KTsKKwkJCWJyZWFrOwogCi0JCU15 TG9naWNhbFJlcFdvcmtlci0+c3RyZWFtX2ZpbGVzZXQgPSBwYWxsb2Moc2l6ZW9mKEZpbGVTZXQp KTsKLQkJRmlsZVNldEluaXQoTXlMb2dpY2FsUmVwV29ya2VyLT5zdHJlYW1fZmlsZXNldCk7CisJ CWNhc2UgVFJBTlNfTEVBREVSX1NFTkRfVE9fUEFSQUxMRUw6CisJCQlBc3NlcnQod2luZm8pOwog Ci0JCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjdHgpOwotCX0KKwkJCS8qCisJCQkgKiBPbmNl IHdlIHN0YXJ0IHNlcmlhbGl6aW5nIHRoZSBjaGFuZ2VzLCB0aGUgcGFyYWxsZWwgYXBwbHkKKwkJ CSAqIHdvcmtlciB3aWxsIHdhaXQgZm9yIHRoZSBsZWFkZXIgdG8gcmVsZWFzZSB0aGUgc3RyZWFt IGxvY2sKKwkJCSAqIHVudGlsIHRoZSBlbmQgb2YgdGhlIHRyYW5zYWN0aW9uLiBTbywgd2UgZG9u J3QgbmVlZCB0byByZWxlYXNlCisJCQkgKiB0aGUgbG9jayBvciBpbmNyZW1lbnQgdGhlIHN0cmVh bSBjb3VudCBpbiB0aGF0IGNhc2UuCisJCQkgKi8KKwkJCWlmIChwYV9zZW5kX2RhdGEod2luZm8s IHMtPmxlbiwgcy0+ZGF0YSkpCisJCQl7CisJCQkJLyoKKwkJCQkgKiBVbmxvY2sgdGhlIHNoYXJl ZCBvYmplY3QgbG9jayBzbyB0aGF0IHRoZSBwYXJhbGxlbCBhcHBseQorCQkJCSAqIHdvcmtlciBj YW4gY29udGludWUgdG8gcmVjZWl2ZSBjaGFuZ2VzLgorCQkJCSAqLworCQkJCWlmICghZmlyc3Rf c2VnbWVudCkKKwkJCQkJcGFfdW5sb2NrX3N0cmVhbSh3aW5mby0+c2hhcmVkLT54aWQsIEFjY2Vz c0V4Y2x1c2l2ZUxvY2spOwogCi0JLyogb3BlbiB0aGUgc3Bvb2wgZmlsZSBmb3IgdGhpcyB0cmFu c2FjdGlvbiAqLwotCXN0cmVhbV9vcGVuX2ZpbGUoTXlMb2dpY2FsUmVwV29ya2VyLT5zdWJpZCwg c3RyZWFtX3hpZCwgZmlyc3Rfc2VnbWVudCk7CisJCQkJLyoKKwkJCQkgKiBJbmNyZW1lbnQgdGhl IG51bWJlciBvZiBzdHJlYW1pbmcgYmxvY2tzIHdhaXRpbmcgdG8gYmUKKwkJCQkgKiBwcm9jZXNz ZWQgYnkgcGFyYWxsZWwgYXBwbHkgd29ya2VyLgorCQkJCSAqLworCQkJCXBnX2F0b21pY19hZGRf ZmV0Y2hfdTMyKCZ3aW5mby0+c2hhcmVkLT5wZW5kaW5nX3N0cmVhbV9jb3VudCwgMSk7CiAKLQkv KiBpZiB0aGlzIGlzIG5vdCB0aGUgZmlyc3Qgc2VnbWVudCwgb3BlbiBleGlzdGluZyBzdWJ4YWN0 IGZpbGUgKi8KLQlpZiAoIWZpcnN0X3NlZ21lbnQpCi0JCXN1YnhhY3RfaW5mb19yZWFkKE15TG9n aWNhbFJlcFdvcmtlci0+c3ViaWQsIHN0cmVhbV94aWQpOworCQkJCS8qIENhY2hlIHRoZSBwYXJh bGxlbCBhcHBseSB3b3JrZXIgZm9yIHRoaXMgdHJhbnNhY3Rpb24uICovCisJCQkJcGFfc2V0X3N0 cmVhbV9hcHBseV93b3JrZXIod2luZm8pOworCQkJCWJyZWFrOworCQkJfQogCi0JcGdzdGF0X3Jl cG9ydF9hY3Rpdml0eShTVEFURV9SVU5OSU5HLCBOVUxMKTsKKwkJCS8qCisJCQkgKiBTd2l0Y2gg dG8gc2VyaWFsaXplIG1vZGUgd2hlbiB3ZSBhcmUgbm90IGFibGUgdG8gc2VuZCB0aGUKKwkJCSAq IGNoYW5nZSB0byBwYXJhbGxlbCBhcHBseSB3b3JrZXIuCisJCQkgKi8KKwkJCXBhX3N3aXRjaF90 b19wYXJ0aWFsX3NlcmlhbGl6ZSh3aW5mbywgIWZpcnN0X3NlZ21lbnQpOwogCi0JZW5kX3JlcGxp Y2F0aW9uX3N0ZXAoKTsKKwkJCS8qIGZhbGwgdGhyb3VnaCAqLworCQljYXNlIFRSQU5TX0xFQURF Ul9QQVJUSUFMX1NFUklBTElaRToKKwkJCUFzc2VydCh3aW5mbyk7CisKKwkJCS8qCisJCQkgKiBP cGVuIHRoZSBzcG9vbCBmaWxlIHVubGVzcyBpdCB3YXMgYWxyZWFkeSBvcGVuZWQgd2hlbiBzd2l0 Y2hpbmcKKwkJCSAqIHRvIHNlcmlhbGl6ZSBtb2RlLiBUaGUgdHJhbnNhY3Rpb24gc3RhcnRlZCBp bgorCQkJICogc3RyZWFtX3N0YXJ0X2ludGVybmFsIHdpbGwgYmUgY29tbWl0dGVkIG9uIHRoZSBz dHJlYW0gc3RvcC4KKwkJCSAqLworCQkJaWYgKGFwcGx5X2FjdGlvbiAhPSBUUkFOU19MRUFERVJf U0VORF9UT19QQVJBTExFTCkKKwkJCQlzdHJlYW1fc3RhcnRfaW50ZXJuYWwoc3RyZWFtX3hpZCwg Zmlyc3Rfc2VnbWVudCk7CisKKwkJCXN0cmVhbV93cml0ZV9jaGFuZ2UoTE9HSUNBTF9SRVBfTVNH X1NUUkVBTV9TVEFSVCwgJm9yaWdpbmFsX21zZyk7CisKKwkJCS8qIENhY2hlIHRoZSBwYXJhbGxl bCBhcHBseSB3b3JrZXIgZm9yIHRoaXMgdHJhbnNhY3Rpb24uICovCisJCQlwYV9zZXRfc3RyZWFt X2FwcGx5X3dvcmtlcih3aW5mbyk7CisJCQlicmVhazsKKworCQljYXNlIFRSQU5TX1BBUkFMTEVM X0FQUExZOgorCQkJaWYgKGZpcnN0X3NlZ21lbnQpCisJCQl7CisJCQkJLyogSG9sZCB0aGUgbG9j ayB1bnRpbCB0aGUgZW5kIG9mIHRoZSB0cmFuc2FjdGlvbi4gKi8KKwkJCQlwYV9sb2NrX3RyYW5z YWN0aW9uKE15UGFyYWxsZWxTaGFyZWQtPnhpZCwgQWNjZXNzRXhjbHVzaXZlTG9jayk7CisJCQkJ cGFfc2V0X3hhY3Rfc3RhdGUoTXlQYXJhbGxlbFNoYXJlZCwgUEFSQUxMRUxfVFJBTlNfU1RBUlRF RCk7CisJCQl9CisKKwkJCXBhcmFsbGVsX3N0cmVhbV9uY2hhbmdlcyA9IDA7CisJCQlicmVhazsK KworCQlkZWZhdWx0OgorCQkJQXNzZXJ0KGZhbHNlKTsKKwkJCWJyZWFrOworCX0KKworCXBnc3Rh dF9yZXBvcnRfYWN0aXZpdHkoU1RBVEVfUlVOTklORywgTlVMTCk7CiB9CiAKIC8qCi0gKiBIYW5k bGUgU1RSRUFNIFNUT1AgbWVzc2FnZS4KKyAqIFVwZGF0ZSB0aGUgaW5mb3JtYXRpb24gYWJvdXQg c3VieGFjdHMgYW5kIGNsb3NlIHRoZSBmaWxlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2hvdWxk IGJlIGNhbGxlZCB3aGVuIHRoZSBzdHJlYW1fc3RhcnRfaW50ZXJuYWwgZnVuY3Rpb24gaGFzCisg KiBiZWVuIGNhbGxlZC4KICAqLwotc3RhdGljIHZvaWQKLWFwcGx5X2hhbmRsZV9zdHJlYW1fc3Rv cChTdHJpbmdJbmZvIHMpCit2b2lkCitzdHJlYW1fc3RvcF9pbnRlcm5hbChUcmFuc2FjdGlvbklk IHhpZCkKIHsKLQlpZiAoIWluX3N0cmVhbWVkX3RyYW5zYWN0aW9uKQotCQllcmVwb3J0KEVSUk9S LAotCQkJCShlcnJjb2RlKEVSUkNPREVfUFJPVE9DT0xfVklPTEFUSU9OKSwKLQkJCQkgZXJybXNn X2ludGVybmFsKCJTVFJFQU0gU1RPUCBtZXNzYWdlIHdpdGhvdXQgU1RSRUFNIFNUQVJUIikpKTsK LQogCS8qCi0JICogQ2xvc2UgdGhlIGZpbGUgd2l0aCBzZXJpYWxpemVkIGNoYW5nZXMsIGFuZCBz ZXJpYWxpemUgaW5mb3JtYXRpb24gYWJvdXQKLQkgKiBzdWJ4YWN0cyBmb3IgdGhlIHRvcGxldmVs IHRyYW5zYWN0aW9uLgorCSAqIFNlcmlhbGl6ZSBpbmZvcm1hdGlvbiBhYm91dCBzdWJ4YWN0cyBm b3IgdGhlIHRvcGxldmVsIHRyYW5zYWN0aW9uLCB0aGVuCisJICogY2xvc2UgdGhlIHN0cmVhbSBt ZXNzYWdlcyBzcG9vbCBmaWxlLgogCSAqLwotCXN1YnhhY3RfaW5mb193cml0ZShNeUxvZ2ljYWxS ZXBXb3JrZXItPnN1YmlkLCBzdHJlYW1feGlkKTsKKwlzdWJ4YWN0X2luZm9fd3JpdGUoTXlMb2dp Y2FsUmVwV29ya2VyLT5zdWJpZCwgeGlkKTsKIAlzdHJlYW1fY2xvc2VfZmlsZSgpOwogCiAJLyog V2UgbXVzdCBiZSBpbiBhIHZhbGlkIHRyYW5zYWN0aW9uIHN0YXRlICovCkBAIC0xMjYxLDQwICsx NjEwLDEyNCBAQCBhcHBseV9oYW5kbGVfc3RyZWFtX3N0b3AoU3RyaW5nSW5mbyBzKQogCS8qIENv bW1pdCB0aGUgcGVyLXN0cmVhbSB0cmFuc2FjdGlvbiAqLwogCUNvbW1pdFRyYW5zYWN0aW9uQ29t bWFuZCgpOwogCi0JaW5fc3RyZWFtZWRfdHJhbnNhY3Rpb24gPSBmYWxzZTsKLQogCS8qIFJlc2V0 IHBlci1zdHJlYW0gY29udGV4dCAqLwogCU1lbW9yeUNvbnRleHRSZXNldChMb2dpY2FsU3RyZWFt aW5nQ29udGV4dCk7Ci0KLQlwZ3N0YXRfcmVwb3J0X2FjdGl2aXR5KFNUQVRFX0lETEUsIE5VTEwp OwotCXJlc2V0X2FwcGx5X2Vycm9yX2NvbnRleHRfaW5mbygpOwogfQogCiAvKgotICogSGFuZGxl IFNUUkVBTSBhYm9ydCBtZXNzYWdlLgorICogSGFuZGxlIFNUUkVBTSBTVE9QIG1lc3NhZ2UuCiAg Ki8KIHN0YXRpYyB2b2lkCi1hcHBseV9oYW5kbGVfc3RyZWFtX2Fib3J0KFN0cmluZ0luZm8gcykK K2FwcGx5X2hhbmRsZV9zdHJlYW1fc3RvcChTdHJpbmdJbmZvIHMpCiB7Ci0JVHJhbnNhY3Rpb25J ZCB4aWQ7Ci0JVHJhbnNhY3Rpb25JZCBzdWJ4aWQ7CisJUGFyYWxsZWxBcHBseVdvcmtlckluZm8g KndpbmZvOworCVRyYW5zQXBwbHlBY3Rpb24gYXBwbHlfYWN0aW9uOwogCi0JaWYgKGluX3N0cmVh bWVkX3RyYW5zYWN0aW9uKQorCWlmICghaW5fc3RyZWFtZWRfdHJhbnNhY3Rpb24pCiAJCWVyZXBv cnQoRVJST1IsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9QUk9UT0NPTF9WSU9MQVRJT04pLAotCQkJ CSBlcnJtc2dfaW50ZXJuYWwoIlNUUkVBTSBBQk9SVCBtZXNzYWdlIHdpdGhvdXQgU1RSRUFNIFNU T1AiKSkpOworCQkJCSBlcnJtc2dfaW50ZXJuYWwoIlNUUkVBTSBTVE9QIG1lc3NhZ2Ugd2l0aG91 dCBTVFJFQU0gU1RBUlQiKSkpOworCisJYXBwbHlfYWN0aW9uID0gZ2V0X3RyYW5zYWN0aW9uX2Fw cGx5X2FjdGlvbihzdHJlYW1feGlkLCAmd2luZm8pOworCisJc3dpdGNoIChhcHBseV9hY3Rpb24p CisJeworCQljYXNlIFRSQU5TX0xFQURFUl9TRVJJQUxJWkU6CisJCQlzdHJlYW1fc3RvcF9pbnRl cm5hbChzdHJlYW1feGlkKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVFJBTlNfTEVBREVSX1NFTkRf VE9fUEFSQUxMRUw6CisJCQlBc3NlcnQod2luZm8pOworCisJCQkvKgorCQkJICogTG9jayBiZWZv cmUgc2VuZGluZyB0aGUgU1RSRUFNX1NUT1AgbWVzc2FnZSBzbyB0aGF0IHRoZSBsZWFkZXIKKwkJ CSAqIGNhbiBob2xkIHRoZSBsb2NrIGZpcnN0IGFuZCB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2Vy IHdpbGwgd2FpdAorCQkJICogZm9yIGxlYWRlciB0byByZWxlYXNlIHRoZSBsb2NrLiBTZWUgTG9j a2luZyBDb25zaWRlcmF0aW9ucyBhdG9wCisJCQkgKiBhcHBseXBhcmFsbGVsd29ya2VyLmMuCisJ CQkgKi8KKwkJCXBhX2xvY2tfc3RyZWFtKHdpbmZvLT5zaGFyZWQtPnhpZCwgQWNjZXNzRXhjbHVz aXZlTG9jayk7CisKKwkJCWlmIChwYV9zZW5kX2RhdGEod2luZm8sIHMtPmxlbiwgcy0+ZGF0YSkp CisJCQl7CisJCQkJcGFfc2V0X3N0cmVhbV9hcHBseV93b3JrZXIoTlVMTCk7CisJCQkJYnJlYWs7 CisJCQl9CisKKwkJCS8qCisJCQkgKiBTd2l0Y2ggdG8gc2VyaWFsaXplIG1vZGUgd2hlbiB3ZSBh cmUgbm90IGFibGUgdG8gc2VuZCB0aGUKKwkJCSAqIGNoYW5nZSB0byBwYXJhbGxlbCBhcHBseSB3 b3JrZXIuCisJCQkgKi8KKwkJCXBhX3N3aXRjaF90b19wYXJ0aWFsX3NlcmlhbGl6ZSh3aW5mbywg dHJ1ZSk7CisKKwkJCS8qIGZhbGwgdGhyb3VnaCAqLworCQljYXNlIFRSQU5TX0xFQURFUl9QQVJU SUFMX1NFUklBTElaRToKKwkJCXN0cmVhbV93cml0ZV9jaGFuZ2UoTE9HSUNBTF9SRVBfTVNHX1NU UkVBTV9TVE9QLCBzKTsKKwkJCXN0cmVhbV9zdG9wX2ludGVybmFsKHN0cmVhbV94aWQpOworCQkJ cGFfc2V0X3N0cmVhbV9hcHBseV93b3JrZXIoTlVMTCk7CisJCQlicmVhazsKKworCQljYXNlIFRS QU5TX1BBUkFMTEVMX0FQUExZOgorCQkJZWxvZyhERUJVRzEsICJhcHBsaWVkICV1IGNoYW5nZXMg aW4gdGhlIHN0cmVhbWluZyBjaHVuayIsCisJCQkJIHBhcmFsbGVsX3N0cmVhbV9uY2hhbmdlcyk7 CisKKwkJCS8qCisJCQkgKiBCeSB0aGUgdGltZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgaXMgcHJv Y2Vzc2luZyB0aGUgY2hhbmdlcyBpbgorCQkJICogdGhlIGN1cnJlbnQgc3RyZWFtaW5nIGJsb2Nr LCB0aGUgbGVhZGVyIGFwcGx5IHdvcmtlciBtYXkgaGF2ZQorCQkJICogc2VudCBtdWx0aXBsZSBz dHJlYW1pbmcgYmxvY2tzLiBUaGlzIGNhbiBsZWFkIHRvIHBhcmFsbGVsIGFwcGx5CisJCQkgKiB3 b3JrZXIgc3RhcnQgd2FpdGluZyBldmVuIHdoZW4gdGhlcmUgYXJlIG1vcmUgY2h1bmsgb2Ygc3Ry ZWFtcworCQkJICogaW4gdGhlIHF1ZXVlLiBTbywgdHJ5IHRvIGxvY2sgb25seSBpZiB0aGVyZSBp cyBubyBtZXNzYWdlIGxlZnQKKwkJCSAqIGluIHRoZSBxdWV1ZS4gU2VlIExvY2tpbmcgQ29uc2lk ZXJhdGlvbnMgYXRvcAorCQkJICogYXBwbHlwYXJhbGxlbHdvcmtlci5jLgorCQkJICoKKwkJCSAq IE5vdGUgdGhhdCBoZXJlIHdlIGhhdmUgYSByYWNlIGNvbmRpdGlvbiB3aGVyZSB3ZSBjYW4gc3Rh cnQKKwkJCSAqIHdhaXRpbmcgZXZlbiB3aGVuIHRoZXJlIGFyZSBwZW5kaW5nIHN0cmVhbWluZyBj aHVua3MuIFRoaXMgY2FuCisJCQkgKiBoYXBwZW4gaWYgdGhlIGxlYWRlciBzZW5kcyBhbm90aGVy IHN0cmVhbWluZyBibG9jayBhbmQgYWNxdWlyZXMKKwkJCSAqIHRoZSBzdHJlYW0gbG9jayBhZ2Fp biBhZnRlciB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyIGNoZWNrcworCQkJICogdGhhdCB0aGVy ZSBpcyBubyBwZW5kaW5nIHN0cmVhbWluZyBibG9jayBhbmQgYmVmb3JlIGl0IGFjdHVhbGx5CisJ CQkgKiBzdGFydHMgd2FpdGluZyBvbiBhIGxvY2suIFdlIGNhbiBoYW5kbGUgdGhpcyBjYXNlIGJ5 IG5vdAorCQkJICogYWxsb3dpbmcgdGhlIGxlYWRlciB0byBpbmNyZW1lbnQgdGhlIHN0cmVhbSBi bG9jayBjb3VudCBkdXJpbmcKKwkJCSAqIHRoZSB0aW1lIHBhcmFsbGVsIGFwcGx5IHdvcmtlciBh Y3F1aXJlcyB0aGUgbG9jayBidXQgaXQgaXMgbm90CisJCQkgKiBjbGVhciB3aGV0aGVyIHRoYXQg aXMgd29ydGggdGhlIGNvbXBsZXhpdHkuCisJCQkgKgorCQkJICogTm93LCBpZiB0aGlzIG1pc3Nl ZCBjaHVuayBjb250YWlucyByb2xsYmFjayB0byBzYXZlcG9pbnQsIHRoZW4KKwkJCSAqIHRoZXJl IGlzIGEgcmlzayBvZiBkZWFkbG9jayB3aGljaCBwcm9iYWJseSBzaG91bGRuJ3QgaGFwcGVuCisJ CQkgKiBhZnRlciByZXN0YXJ0LgorCQkJICovCisJCQlwYV9kZWNyX2FuZF93YWl0X3N0cmVhbV9i bG9jaygpOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCUFzc2VydChmYWxzZSk7CisJCQli cmVhazsKKwl9CisKKwlpbl9zdHJlYW1lZF90cmFuc2FjdGlvbiA9IGZhbHNlOworCisJLyoKKwkg KiBUaGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyIGNvdWxkIGJlIGluIGEgdHJhbnNhY3Rpb24gaW4g d2hpY2ggY2FzZSB3ZQorCSAqIG5lZWQgdG8gcmVwb3J0IHRoZSBzdGF0ZSBhcyBTVEFURV9JRExF SU5UUkFOU0FDVElPTi4KKwkgKi8KKwlpZiAoSXNUcmFuc2FjdGlvbk9yVHJhbnNhY3Rpb25CbG9j aygpKQorCQlwZ3N0YXRfcmVwb3J0X2FjdGl2aXR5KFNUQVRFX0lETEVJTlRSQU5TQUNUSU9OLCBO VUxMKTsKKwllbHNlCisJCXBnc3RhdF9yZXBvcnRfYWN0aXZpdHkoU1RBVEVfSURMRSwgTlVMTCk7 CiAKLQlsb2dpY2FscmVwX3JlYWRfc3RyZWFtX2Fib3J0KHMsICZ4aWQsICZzdWJ4aWQpOworCXJl c2V0X2FwcGx5X2Vycm9yX2NvbnRleHRfaW5mbygpOworfQogCisvKgorICogSGVscGVyIGZ1bmN0 aW9uIHRvIGhhbmRsZSBTVFJFQU0gQUJPUlQgbWVzc2FnZSB3aGVuIHRoZSB0cmFuc2FjdGlvbiB3 YXMKKyAqIHNlcmlhbGl6ZWQgdG8gZmlsZS4KKyAqLworc3RhdGljIHZvaWQKK3N0cmVhbV9hYm9y dF9pbnRlcm5hbChUcmFuc2FjdGlvbklkIHhpZCwgVHJhbnNhY3Rpb25JZCBzdWJ4aWQpCit7CiAJ LyoKIAkgKiBJZiB0aGUgdHdvIFhJRHMgYXJlIHRoZSBzYW1lLCBpdCdzIGluIGZhY3QgYWJvcnQg b2YgdG9wbGV2ZWwgeGFjdCwgc28KIAkgKiBqdXN0IGRlbGV0ZSB0aGUgZmlsZXMgd2l0aCBzZXJp YWxpemVkIGluZm8uCiAJICovCiAJaWYgKHhpZCA9PSBzdWJ4aWQpCi0JewotCQlzZXRfYXBwbHlf ZXJyb3JfY29udGV4dF94YWN0KHhpZCwgSW52YWxpZFhMb2dSZWNQdHIpOwogCQlzdHJlYW1fY2xl YW51cF9maWxlcyhNeUxvZ2ljYWxSZXBXb3JrZXItPnN1YmlkLCB4aWQpOwotCX0KIAllbHNlCiAJ ewogCQkvKgpAQCAtMTMxOCw4ICsxNzUxLDYgQEAgYXBwbHlfaGFuZGxlX3N0cmVhbV9hYm9ydChT dHJpbmdJbmZvIHMpCiAJCWJvb2wJCWZvdW5kID0gZmFsc2U7CiAJCWNoYXIJCXBhdGhbTUFYUEdQ QVRIXTsKIAotCQlzZXRfYXBwbHlfZXJyb3JfY29udGV4dF94YWN0KHN1YnhpZCwgSW52YWxpZFhM b2dSZWNQdHIpOwotCiAJCXN1YmlkeCA9IC0xOwogCQliZWdpbl9yZXBsaWNhdGlvbl9zdGVwKCk7 CiAJCXN1YnhhY3RfaW5mb19yZWFkKE15TG9naWNhbFJlcFdvcmtlci0+c3ViaWQsIHhpZCk7CkBA IC0xMzQ0LDQ3ICsxNzc1LDIzNyBAQCBhcHBseV9oYW5kbGVfc3RyZWFtX2Fib3J0KFN0cmluZ0lu Zm8gcykKIAkJCWNsZWFudXBfc3VieGFjdF9pbmZvKCk7CiAJCQllbmRfcmVwbGljYXRpb25fc3Rl cCgpOwogCQkJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7Ci0JCQlyZXNldF9hcHBseV9lcnJv cl9jb250ZXh0X2luZm8oKTsKIAkJCXJldHVybjsKIAkJfQogCi0JCS8qIG9wZW4gdGhlIGNoYW5n ZXMgZmlsZSAqLwotCQljaGFuZ2VzX2ZpbGVuYW1lKHBhdGgsIE15TG9naWNhbFJlcFdvcmtlci0+ c3ViaWQsIHhpZCk7Ci0JCWZkID0gQnVmRmlsZU9wZW5GaWxlU2V0KE15TG9naWNhbFJlcFdvcmtl ci0+c3RyZWFtX2ZpbGVzZXQsIHBhdGgsCi0JCQkJCQkJCU9fUkRXUiwgZmFsc2UpOworCQkvKiBv cGVuIHRoZSBjaGFuZ2VzIGZpbGUgKi8KKwkJY2hhbmdlc19maWxlbmFtZShwYXRoLCBNeUxvZ2lj YWxSZXBXb3JrZXItPnN1YmlkLCB4aWQpOworCQlmZCA9IEJ1ZkZpbGVPcGVuRmlsZVNldChNeUxv Z2ljYWxSZXBXb3JrZXItPnN0cmVhbV9maWxlc2V0LCBwYXRoLAorCQkJCQkJCQlPX1JEV1IsIGZh bHNlKTsKKworCQkvKiBPSywgdHJ1bmNhdGUgdGhlIGZpbGUgYXQgdGhlIHJpZ2h0IG9mZnNldCAq LworCQlCdWZGaWxlVHJ1bmNhdGVGaWxlU2V0KGZkLCBzdWJ4YWN0X2RhdGEuc3VieGFjdHNbc3Vi aWR4XS5maWxlbm8sCisJCQkJCQkJICAgc3VieGFjdF9kYXRhLnN1YnhhY3RzW3N1YmlkeF0ub2Zm c2V0KTsKKwkJQnVmRmlsZUNsb3NlKGZkKTsKKworCQkvKiBkaXNjYXJkIHRoZSBzdWJ4YWN0cyBh ZGRlZCBsYXRlciAqLworCQlzdWJ4YWN0X2RhdGEubnN1YnhhY3RzID0gc3ViaWR4OworCisJCS8q IHdyaXRlIHRoZSB1cGRhdGVkIHN1YnhhY3QgbGlzdCAqLworCQlzdWJ4YWN0X2luZm9fd3JpdGUo TXlMb2dpY2FsUmVwV29ya2VyLT5zdWJpZCwgeGlkKTsKKworCQllbmRfcmVwbGljYXRpb25fc3Rl cCgpOworCQlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKwl9Cit9CisKKy8qCisgKiBIYW5k bGUgU1RSRUFNIEFCT1JUIG1lc3NhZ2UuCisgKi8KK3N0YXRpYyB2b2lkCithcHBseV9oYW5kbGVf c3RyZWFtX2Fib3J0KFN0cmluZ0luZm8gcykKK3sKKwlUcmFuc2FjdGlvbklkIHhpZDsKKwlUcmFu c2FjdGlvbklkIHN1YnhpZDsKKwlMb2dpY2FsUmVwU3RyZWFtQWJvcnREYXRhIGFib3J0X2RhdGE7 CisJUGFyYWxsZWxBcHBseVdvcmtlckluZm8gKndpbmZvOworCVRyYW5zQXBwbHlBY3Rpb24gYXBw bHlfYWN0aW9uOworCisJLyogU2F2ZSB0aGUgbWVzc2FnZSBiZWZvcmUgaXQgaXMgY29uc3VtZWQu ICovCisJU3RyaW5nSW5mb0RhdGEgb3JpZ2luYWxfbXNnID0gKnM7CisJYm9vbAkJdG9wbGV2ZWxf eGFjdDsKKworCWlmIChpbl9zdHJlYW1lZF90cmFuc2FjdGlvbikKKwkJZXJlcG9ydChFUlJPUiwK KwkJCQkoZXJyY29kZShFUlJDT0RFX1BST1RPQ09MX1ZJT0xBVElPTiksCisJCQkJIGVycm1zZ19p bnRlcm5hbCgiU1RSRUFNIEFCT1JUIG1lc3NhZ2Ugd2l0aG91dCBTVFJFQU0gU1RPUCIpKSk7CisK KwkvKiBXZSByZWNlaXZlIGFib3J0IGluZm9ybWF0aW9uIG9ubHkgd2hlbiB3ZSBjYW4gYXBwbHkg aW4gcGFyYWxsZWwuICovCisJbG9naWNhbHJlcF9yZWFkX3N0cmVhbV9hYm9ydChzLCAmYWJvcnRf ZGF0YSwKKwkJCQkJCQkJIE15TG9naWNhbFJlcFdvcmtlci0+cGFyYWxsZWxfYXBwbHkpOworCisJ eGlkID0gYWJvcnRfZGF0YS54aWQ7CisJc3VieGlkID0gYWJvcnRfZGF0YS5zdWJ4aWQ7CisJdG9w bGV2ZWxfeGFjdCA9ICh4aWQgPT0gc3VieGlkKTsKKworCXNldF9hcHBseV9lcnJvcl9jb250ZXh0 X3hhY3Qoc3VieGlkLCBhYm9ydF9kYXRhLmFib3J0X2xzbik7CisKKwlhcHBseV9hY3Rpb24gPSBn ZXRfdHJhbnNhY3Rpb25fYXBwbHlfYWN0aW9uKHhpZCwgJndpbmZvKTsKKworCXN3aXRjaCAoYXBw bHlfYWN0aW9uKQorCXsKKwkJY2FzZSBUUkFOU19MRUFERVJfU0VSSUFMSVpFOgorCisJCQkvKgor CQkJICogV2UgYXJlIGluIHRoZSBsZWFkZXIgYXBwbHkgd29ya2VyIGFuZCB0aGUgdHJhbnNhY3Rp b24gaGFzIGJlZW4KKwkJCSAqIHNlcmlhbGl6ZWQgdG8gZmlsZS4KKwkJCSAqLworCQkJc3RyZWFt X2Fib3J0X2ludGVybmFsKHhpZCwgc3VieGlkKTsKKworCQkJZWxvZyhERUJVRzEsICJmaW5pc2hl ZCBwcm9jZXNzaW5nIHRoZSBTVFJFQU0gQUJPUlQgY29tbWFuZCIpOworCQkJYnJlYWs7CisKKwkJ Y2FzZSBUUkFOU19MRUFERVJfU0VORF9UT19QQVJBTExFTDoKKwkJCUFzc2VydCh3aW5mbyk7CisK KwkJCS8qCisJCQkgKiBGb3IgdGhlIGNhc2Ugb2YgYWJvcnRpbmcgdGhlIHN1YnRyYW5zYWN0aW9u LCB3ZSBpbmNyZW1lbnQgdGhlCisJCQkgKiBudW1iZXIgb2Ygc3RyZWFtaW5nIGJsb2NrcyBhbmQg dGFrZSB0aGUgbG9jayBhZ2FpbiBiZWZvcmUKKwkJCSAqIHNlbmRpbmcgdGhlIFNUUkVBTV9BQk9S VCB0byBlbnN1cmUgdGhhdCB0aGUgcGFyYWxsZWwgYXBwbHkKKwkJCSAqIHdvcmtlciB3aWxsIHdh aXQgb24gdGhlIGxvY2sgZm9yIHRoZSBuZXh0IHNldCBvZiBjaGFuZ2VzIGFmdGVyCisJCQkgKiBw cm9jZXNzaW5nIHRoZSBTVFJFQU1fQUJPUlQgbWVzc2FnZSBpZiBpdCBpcyBub3QgYWxyZWFkeQor CQkJICogd2FpdGluZyBmb3IgU1RSRUFNX1NUT1AgbWVzc2FnZS4KKwkJCSAqCisJCQkgKiBJdCBp cyBpbXBvcnRhbnQgdG8gcGVyZm9ybSB0aGlzIGxvY2tpbmcgYmVmb3JlIHNlbmRpbmcgdGhlCisJ CQkgKiBTVFJFQU1fQUJPUlQgbWVzc2FnZSBzbyB0aGF0IHRoZSBsZWFkZXIgY2FuIGhvbGQgdGhl IGxvY2sgZmlyc3QKKwkJCSAqIGFuZCB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyIHdpbGwgd2Fp dCBmb3IgdGhlIGxlYWRlciB0bworCQkJICogcmVsZWFzZSB0aGUgbG9jay4gVGhpcyBpcyB0aGUg c2FtZSBhcyB3aGF0IHdlIGRvIGluCisJCQkgKiBhcHBseV9oYW5kbGVfc3RyZWFtX3N0b3AuIFNl ZSBMb2NraW5nIENvbnNpZGVyYXRpb25zIGF0b3AKKwkJCSAqIGFwcGx5cGFyYWxsZWx3b3JrZXIu Yy4KKwkJCSAqLworCQkJaWYgKCF0b3BsZXZlbF94YWN0KQorCQkJeworCQkJCXBhX3VubG9ja19z dHJlYW0oeGlkLCBBY2Nlc3NFeGNsdXNpdmVMb2NrKTsKKwkJCQlwZ19hdG9taWNfYWRkX2ZldGNo X3UzMigmd2luZm8tPnNoYXJlZC0+cGVuZGluZ19zdHJlYW1fY291bnQsIDEpOworCQkJCXBhX2xv Y2tfc3RyZWFtKHhpZCwgQWNjZXNzRXhjbHVzaXZlTG9jayk7CisJCQl9CisKKwkJCWlmIChwYV9z ZW5kX2RhdGEod2luZm8sIHMtPmxlbiwgcy0+ZGF0YSkpCisJCQl7CisJCQkJLyoKKwkJCQkgKiBV bmxpa2UgU1RSRUFNX0NPTU1JVCBhbmQgU1RSRUFNX1BSRVBBUkUsIHdlIGRvbid0IG5lZWQgdG8K KwkJCQkgKiB3YWl0IGhlcmUgZm9yIHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgdG8gZmluaXNo IGFzIHRoYXQKKwkJCQkgKiBpcyBub3QgcmVxdWlyZWQgdG8gbWFpbnRhaW4gdGhlIGNvbW1pdCBv cmRlciBhbmQgd29uJ3QgaGF2ZQorCQkJCSAqIHRoZSByaXNrIG9mIGZhaWx1cmVzIGR1ZSB0byB0 cmFuc2FjdGlvbiBkZXBlbmRlbmNpZXMgYW5kCisJCQkJICogZGVhZGxvY2tzLiBIb3dldmVyLCBp dCBpcyBwb3NzaWJsZSB0aGF0IGJlZm9yZSB0aGUgcGFyYWxsZWwKKwkJCQkgKiB3b3JrZXIgZmlu aXNoZXMgYW5kIHdlIGNsZWFyIHRoZSB3b3JrZXIgaW5mbywgdGhlIHhpZAorCQkJCSAqIHdyYXBh cm91bmQgaGFwcGVucyBvbiB0aGUgdXBzdHJlYW0gYW5kIGEgbmV3IHRyYW5zYWN0aW9uCisJCQkJ ICogd2l0aCB0aGUgc2FtZSB4aWQgY2FuIGFwcGVhciBhbmQgdGhhdCBjYW4gbGVhZCB0byBkdXBs aWNhdGUKKwkJCQkgKiBlbnRyaWVzIGluIFBhcmFsbGVsQXBwbHlUeG5IYXNoLiBZZXQgYW5vdGhl ciBwcm9ibGVtIGNvdWxkCisJCQkJICogYmUgdGhhdCB3ZSBtYXkgaGF2ZSBzZXJpYWxpemVkIHRo ZSBjaGFuZ2VzIGluIHBhcnRpYWwKKwkJCQkgKiBzZXJpYWxpemUgbW9kZSBhbmQgdGhlIGZpbGUg Y29udGFpbmluZyB4YWN0IGNoYW5nZXMgbWF5CisJCQkJICogYWxyZWFkeSBleGlzdCwgYW5kIGFm dGVyIHhpZCB3cmFwYXJvdW5kIHRyeWluZyB0byBjcmVhdGUKKwkJCQkgKiB0aGUgZmlsZSBmb3Ig dGhlIHNhbWUgeGlkIGNhbiBsZWFkIHRvIGFuIGVycm9yLiBUbyBhdm9pZAorCQkJCSAqIHRoZXNl IHByb2JsZW1zLCB3ZSBkZWNpZGUgdG8gd2FpdCBmb3IgdGhlIGFib3J0cyB0byBmaW5pc2guCisJ CQkJICoKKwkJCQkgKiBOb3RlLCBpdCBpcyBva2F5IHRvIG5vdCB1cGRhdGUgdGhlIGZsdXNoIGxv Y2F0aW9uIHBvc2l0aW9uCisJCQkJICogZm9yIGFib3J0cyBhcyBpbiB3b3JzdCBjYXNlIHRoYXQg bWVhbnMgc3VjaCBhIHRyYW5zYWN0aW9uCisJCQkJICogd29uJ3QgYmUgc2VudCBhZ2FpbiBhZnRl ciByZXN0YXJ0LgorCQkJCSAqLworCQkJCWlmICh0b3BsZXZlbF94YWN0KQorCQkJCQlwYV94YWN0 X2ZpbmlzaCh3aW5mbywgSW52YWxpZFhMb2dSZWNQdHIpOworCisJCQkJYnJlYWs7CisJCQl9CisK KwkJCS8qCisJCQkgKiBTd2l0Y2ggdG8gc2VyaWFsaXplIG1vZGUgd2hlbiB3ZSBhcmUgbm90IGFi bGUgdG8gc2VuZCB0aGUKKwkJCSAqIGNoYW5nZSB0byBwYXJhbGxlbCBhcHBseSB3b3JrZXIuCisJ CQkgKi8KKwkJCXBhX3N3aXRjaF90b19wYXJ0aWFsX3NlcmlhbGl6ZSh3aW5mbywgdHJ1ZSk7CisK KwkJCS8qIGZhbGwgdGhyb3VnaCAqLworCQljYXNlIFRSQU5TX0xFQURFUl9QQVJUSUFMX1NFUklB TElaRToKKwkJCUFzc2VydCh3aW5mbyk7CisKKwkJCS8qCisJCQkgKiBQYXJhbGxlbCBhcHBseSB3 b3JrZXIgbWlnaHQgaGF2ZSBhcHBsaWVkIHNvbWUgY2hhbmdlcywgc28gd3JpdGUKKwkJCSAqIHRo ZSBTVFJFQU1fQUJPUlQgbWVzc2FnZSBzbyB0aGF0IGl0IGNhbiByb2xsYmFjayB0aGUKKwkJCSAq IHN1YnRyYW5zYWN0aW9uIGlmIG5lZWRlZC4KKwkJCSAqLworCQkJc3RyZWFtX29wZW5fYW5kX3dy aXRlX2NoYW5nZSh4aWQsIExPR0lDQUxfUkVQX01TR19TVFJFQU1fQUJPUlQsCisJCQkJCQkJCQkJ ICZvcmlnaW5hbF9tc2cpOworCisJCQlpZiAodG9wbGV2ZWxfeGFjdCkKKwkJCXsKKwkJCQlwYV9z ZXRfZmlsZXNldF9zdGF0ZSh3aW5mby0+c2hhcmVkLCBGU19TRVJJQUxJWkVfRE9ORSk7CisJCQkJ cGFfeGFjdF9maW5pc2god2luZm8sIEludmFsaWRYTG9nUmVjUHRyKTsKKwkJCX0KKwkJCWJyZWFr OworCisJCWNhc2UgVFJBTlNfUEFSQUxMRUxfQVBQTFk6CisKKwkJCS8qCisJCQkgKiBJZiB0aGUg cGFyYWxsZWwgYXBwbHkgd29ya2VyIGlzIGFwcGx5aW5nIHNwb29sZWQgbWVzc2FnZXMgdGhlbgor CQkJICogY2xvc2UgdGhlIGZpbGUgYmVmb3JlIGFib3J0aW5nLgorCQkJICovCisJCQlpZiAodG9w bGV2ZWxfeGFjdCAmJiBzdHJlYW1fZmQpCisJCQkJc3RyZWFtX2Nsb3NlX2ZpbGUoKTsKKworCQkJ cGFfc3RyZWFtX2Fib3J0KCZhYm9ydF9kYXRhKTsKKworCQkJLyoKKwkJCSAqIFdlIG5lZWQgdG8g d2FpdCBhZnRlciBwcm9jZXNzaW5nIHJvbGxiYWNrIHRvIHNhdmVwb2ludCBmb3IgdGhlCisJCQkg KiBuZXh0IHNldCBvZiBjaGFuZ2VzLgorCQkJICoKKwkJCSAqIFdlIGhhdmUgYSByYWNlIGNvbmRp dGlvbiBoZXJlIGR1ZSB0byB3aGljaCB3ZSBjYW4gc3RhcnQgd2FpdGluZworCQkJICogaGVyZSB3 aGVuIHRoZXJlIGFyZSBtb3JlIGNodW5rIG9mIHN0cmVhbXMgaW4gdGhlIHF1ZXVlLiBTZWUKKwkJ CSAqIGFwcGx5X2hhbmRsZV9zdHJlYW1fc3RvcC4KKwkJCSAqLworCQkJaWYgKCF0b3BsZXZlbF94 YWN0KQorCQkJCXBhX2RlY3JfYW5kX3dhaXRfc3RyZWFtX2Jsb2NrKCk7CisKKwkJCWVsb2coREVC VUcxLCAiZmluaXNoZWQgcHJvY2Vzc2luZyB0aGUgU1RSRUFNIEFCT1JUIGNvbW1hbmQiKTsKKwkJ CWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlBc3NlcnQoZmFsc2UpOworCQkJYnJlYWs7CisJfQor CisJcmVzZXRfYXBwbHlfZXJyb3JfY29udGV4dF9pbmZvKCk7Cit9CisKKy8qCisgKiBFbnN1cmUg dGhhdCB0aGUgcGFzc2VkIGxvY2F0aW9uIGlzIGZpbGVzZXQncyBlbmQuCisgKi8KK3N0YXRpYyB2 b2lkCitlbnN1cmVfbGFzdF9tZXNzYWdlKEZpbGVTZXQgKnN0cmVhbV9maWxlc2V0LCBUcmFuc2Fj dGlvbklkIHhpZCwgaW50IGZpbGVubywKKwkJCQkJb2ZmX3Qgb2Zmc2V0KQoreworCWNoYXIJCXBh dGhbTUFYUEdQQVRIXTsKKwlCdWZGaWxlICAgICpmZDsKKwlpbnQJCQlsYXN0X2ZpbGVubzsKKwlv ZmZfdAkJbGFzdF9vZmZzZXQ7CisKKwlBc3NlcnQoIUlzVHJhbnNhY3Rpb25TdGF0ZSgpKTsKIAot CQkvKiBPSywgdHJ1bmNhdGUgdGhlIGZpbGUgYXQgdGhlIHJpZ2h0IG9mZnNldCAqLwotCQlCdWZG aWxlVHJ1bmNhdGVGaWxlU2V0KGZkLCBzdWJ4YWN0X2RhdGEuc3VieGFjdHNbc3ViaWR4XS5maWxl bm8sCi0JCQkJCQkJICAgc3VieGFjdF9kYXRhLnN1YnhhY3RzW3N1YmlkeF0ub2Zmc2V0KTsKLQkJ QnVmRmlsZUNsb3NlKGZkKTsKKwliZWdpbl9yZXBsaWNhdGlvbl9zdGVwKCk7CiAKLQkJLyogZGlz Y2FyZCB0aGUgc3VieGFjdHMgYWRkZWQgbGF0ZXIgKi8KLQkJc3VieGFjdF9kYXRhLm5zdWJ4YWN0 cyA9IHN1YmlkeDsKKwljaGFuZ2VzX2ZpbGVuYW1lKHBhdGgsIE15TG9naWNhbFJlcFdvcmtlci0+ c3ViaWQsIHhpZCk7CiAKLQkJLyogd3JpdGUgdGhlIHVwZGF0ZWQgc3VieGFjdCBsaXN0ICovCi0J CXN1YnhhY3RfaW5mb193cml0ZShNeUxvZ2ljYWxSZXBXb3JrZXItPnN1YmlkLCB4aWQpOworCWZk ID0gQnVmRmlsZU9wZW5GaWxlU2V0KHN0cmVhbV9maWxlc2V0LCBwYXRoLCBPX1JET05MWSwgZmFs c2UpOwogCi0JCWVuZF9yZXBsaWNhdGlvbl9zdGVwKCk7Ci0JCUNvbW1pdFRyYW5zYWN0aW9uQ29t bWFuZCgpOwotCX0KKwlCdWZGaWxlU2VlayhmZCwgMCwgMCwgU0VFS19FTkQpOworCUJ1ZkZpbGVU ZWxsKGZkLCAmbGFzdF9maWxlbm8sICZsYXN0X29mZnNldCk7CiAKLQlyZXNldF9hcHBseV9lcnJv cl9jb250ZXh0X2luZm8oKTsKKwlCdWZGaWxlQ2xvc2UoZmQpOworCisJZW5kX3JlcGxpY2F0aW9u X3N0ZXAoKTsKKworCWlmIChsYXN0X2ZpbGVubyAhPSBmaWxlbm8gfHwgbGFzdF9vZmZzZXQgIT0g b2Zmc2V0KQorCQllbG9nKEVSUk9SLCAidW5leHBlY3RlZCBtZXNzYWdlIGxlZnQgaW4gc3RyZWFt aW5nIHRyYW5zYWN0aW9uJ3MgY2hhbmdlcyBmaWxlIFwiJXNcIiIsCisJCQkgcGF0aCk7CiB9CiAK IC8qCiAgKiBDb21tb24gc3Bvb2xmaWxlIHByb2Nlc3NpbmcuCiAgKi8KLXN0YXRpYyB2b2lkCi1h cHBseV9zcG9vbGVkX21lc3NhZ2VzKFRyYW5zYWN0aW9uSWQgeGlkLCBYTG9nUmVjUHRyIGxzbikK K3ZvaWQKK2FwcGx5X3Nwb29sZWRfbWVzc2FnZXMoRmlsZVNldCAqc3RyZWFtX2ZpbGVzZXQsIFRy YW5zYWN0aW9uSWQgeGlkLAorCQkJCQkgICBYTG9nUmVjUHRyIGxzbikKIHsKIAlTdHJpbmdJbmZv RGF0YSBzMjsKIAlpbnQJCQluY2hhbmdlczsKIAljaGFyCQlwYXRoW01BWFBHUEFUSF07CiAJY2hh cgkgICAqYnVmZmVyID0gTlVMTDsKIAlNZW1vcnlDb250ZXh0IG9sZGN4dDsKLQlCdWZGaWxlICAg ICpmZDsKKwlSZXNvdXJjZU93bmVyIG9sZG93bmVyOworCWludAkJCWZpbGVubzsKKwlvZmZfdAkJ b2Zmc2V0OwogCi0JbWF5YmVfc3RhcnRfc2tpcHBpbmdfY2hhbmdlcyhsc24pOworCWlmICghYW1f cGFyYWxsZWxfYXBwbHlfd29ya2VyKCkpCisJCW1heWJlX3N0YXJ0X3NraXBwaW5nX2NoYW5nZXMo bHNuKTsKIAogCS8qIE1ha2Ugc3VyZSB3ZSBoYXZlIGFuIG9wZW4gdHJhbnNhY3Rpb24gKi8KIAli ZWdpbl9yZXBsaWNhdGlvbl9zdGVwKCk7CkBAIC0xNDAwLDggKzIwMjEsMTYgQEAgYXBwbHlfc3Bv b2xlZF9tZXNzYWdlcyhUcmFuc2FjdGlvbklkIHhpZCwgWExvZ1JlY1B0ciBsc24pCiAJY2hhbmdl c19maWxlbmFtZShwYXRoLCBNeUxvZ2ljYWxSZXBXb3JrZXItPnN1YmlkLCB4aWQpOwogCWVsb2co REVCVUcxLCAicmVwbGF5aW5nIGNoYW5nZXMgZnJvbSBmaWxlIFwiJXNcIiIsIHBhdGgpOwogCi0J ZmQgPSBCdWZGaWxlT3BlbkZpbGVTZXQoTXlMb2dpY2FsUmVwV29ya2VyLT5zdHJlYW1fZmlsZXNl dCwgcGF0aCwgT19SRE9OTFksCi0JCQkJCQkJZmFsc2UpOworCS8qCisJICogTWFrZSBzdXJlIHRo ZSBmaWxlIGlzIG93bmVkIGJ5IHRoZSB0b3BsZXZlbCB0cmFuc2FjdGlvbiBzbyB0aGF0IHRoZQor CSAqIGZpbGUgd2lsbCBub3QgYmUgYWNjaWRlbnRhbGx5IGNsb3NlZCB3aGVuIGFib3J0aW5nIGEg c3VidHJhbnNhY3Rpb24uCisJICovCisJb2xkb3duZXIgPSBDdXJyZW50UmVzb3VyY2VPd25lcjsK KwlDdXJyZW50UmVzb3VyY2VPd25lciA9IFRvcFRyYW5zYWN0aW9uUmVzb3VyY2VPd25lcjsKKwor CXN0cmVhbV9mZCA9IEJ1ZkZpbGVPcGVuRmlsZVNldChzdHJlYW1fZmlsZXNldCwgcGF0aCwgT19S RE9OTFksIGZhbHNlKTsKKworCUN1cnJlbnRSZXNvdXJjZU93bmVyID0gb2xkb3duZXI7CiAKIAli dWZmZXIgPSBwYWxsb2MoQkxDS1NaKTsKIAlpbml0U3RyaW5nSW5mbygmczIpOwpAQCAtMTQzMiw3 ICsyMDYxLDcgQEAgYXBwbHlfc3Bvb2xlZF9tZXNzYWdlcyhUcmFuc2FjdGlvbklkIHhpZCwgWExv Z1JlY1B0ciBsc24pCiAJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CiAKIAkJLyogcmVhZCBsZW5n dGggb2YgdGhlIG9uLWRpc2sgcmVjb3JkICovCi0JCW5ieXRlcyA9IEJ1ZkZpbGVSZWFkKGZkLCAm bGVuLCBzaXplb2YobGVuKSk7CisJCW5ieXRlcyA9IEJ1ZkZpbGVSZWFkKHN0cmVhbV9mZCwgJmxl biwgc2l6ZW9mKGxlbikpOwogCiAJCS8qIGhhdmUgd2UgcmVhY2hlZCBlbmQgb2YgdGhlIGZpbGU/ ICovCiAJCWlmIChuYnl0ZXMgPT0gMCkKQEAgLTE0NTMsMTIgKzIwODIsMTQgQEAgYXBwbHlfc3Bv b2xlZF9tZXNzYWdlcyhUcmFuc2FjdGlvbklkIHhpZCwgWExvZ1JlY1B0ciBsc24pCiAJCWJ1ZmZl ciA9IHJlcGFsbG9jKGJ1ZmZlciwgbGVuKTsKIAogCQkvKiBhbmQgZmluYWxseSByZWFkIHRoZSBk YXRhIGludG8gdGhlIGJ1ZmZlciAqLwotCQlpZiAoQnVmRmlsZVJlYWQoZmQsIGJ1ZmZlciwgbGVu KSAhPSBsZW4pCisJCWlmIChCdWZGaWxlUmVhZChzdHJlYW1fZmQsIGJ1ZmZlciwgbGVuKSAhPSBs ZW4pCiAJCQllcmVwb3J0KEVSUk9SLAogCQkJCQkoZXJyY29kZV9mb3JfZmlsZV9hY2Nlc3MoKSwK IAkJCQkJIGVycm1zZygiY291bGQgbm90IHJlYWQgZnJvbSBzdHJlYW1pbmcgdHJhbnNhY3Rpb24n cyBjaGFuZ2VzIGZpbGUgXCIlc1wiOiAlbSIsCiAJCQkJCQkJcGF0aCkpKTsKIAorCQlCdWZGaWxl VGVsbChzdHJlYW1fZmQsICZmaWxlbm8sICZvZmZzZXQpOworCiAJCS8qIGNvcHkgdGhlIGJ1ZmZl ciB0byB0aGUgc3RyaW5naW5mbyBhbmQgY2FsbCBhcHBseV9kaXNwYXRjaCAqLwogCQlyZXNldFN0 cmluZ0luZm8oJnMyKTsKIAkJYXBwZW5kQmluYXJ5U3RyaW5nSW5mbygmczIsIGJ1ZmZlciwgbGVu KTsKQEAgLTE0NzQsMTUgKzIxMDUsMjQgQEAgYXBwbHlfc3Bvb2xlZF9tZXNzYWdlcyhUcmFuc2Fj dGlvbklkIHhpZCwgWExvZ1JlY1B0ciBsc24pCiAKIAkJbmNoYW5nZXMrKzsKIAorCQkvKgorCQkg KiBJdCBpcyBwb3NzaWJsZSB0aGUgZmlsZSBoYXMgYmVlbiBjbG9zZWQgYmVjYXVzZSB3ZSBoYXZl IHByb2Nlc3NlZAorCQkgKiB0aGUgdHJhbnNhY3Rpb24gZW5kIG1lc3NhZ2UgbGlrZSBzdHJlYW1f Y29tbWl0IGluIHdoaWNoIGNhc2UgdGhhdAorCQkgKiBtdXN0IGJlIHRoZSBsYXN0IG1lc3NhZ2Uu CisJCSAqLworCQlpZiAoIXN0cmVhbV9mZCkKKwkJeworCQkJZW5zdXJlX2xhc3RfbWVzc2FnZShz dHJlYW1fZmlsZXNldCwgeGlkLCBmaWxlbm8sIG9mZnNldCk7CisJCQlicmVhazsKKwkJfQorCiAJ CWlmIChuY2hhbmdlcyAlIDEwMDAgPT0gMCkKIAkJCWVsb2coREVCVUcxLCAicmVwbGF5ZWQgJWQg Y2hhbmdlcyBmcm9tIGZpbGUgXCIlc1wiIiwKIAkJCQkgbmNoYW5nZXMsIHBhdGgpOwogCX0KIAot CUJ1ZkZpbGVDbG9zZShmZCk7Ci0KLQlwZnJlZShidWZmZXIpOwotCXBmcmVlKHMyLmRhdGEpOwor CWlmIChzdHJlYW1fZmQpCisJCXN0cmVhbV9jbG9zZV9maWxlKCk7CiAKIAllbG9nKERFQlVHMSwg InJlcGxheWVkICVkIChhbGwpIGNoYW5nZXMgZnJvbSBmaWxlIFwiJXNcIiIsCiAJCSBuY2hhbmdl cywgcGF0aCk7CkBAIC0xNDk4LDYgKzIxMzgsMTEgQEAgYXBwbHlfaGFuZGxlX3N0cmVhbV9jb21t aXQoU3RyaW5nSW5mbyBzKQogewogCVRyYW5zYWN0aW9uSWQgeGlkOwogCUxvZ2ljYWxSZXBDb21t aXREYXRhIGNvbW1pdF9kYXRhOworCVBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICp3aW5mbzsKKwlU cmFuc0FwcGx5QWN0aW9uIGFwcGx5X2FjdGlvbjsKKworCS8qIFNhdmUgdGhlIG1lc3NhZ2UgYmVm b3JlIGl0IGlzIGNvbnN1bWVkLiAqLworCVN0cmluZ0luZm9EYXRhIG9yaWdpbmFsX21zZyA9ICpz OwogCiAJaWYgKGluX3N0cmVhbWVkX3RyYW5zYWN0aW9uKQogCQllcmVwb3J0KEVSUk9SLApAQCAt MTUwNywxNCArMjE1Miw4NSBAQCBhcHBseV9oYW5kbGVfc3RyZWFtX2NvbW1pdChTdHJpbmdJbmZv IHMpCiAJeGlkID0gbG9naWNhbHJlcF9yZWFkX3N0cmVhbV9jb21taXQocywgJmNvbW1pdF9kYXRh KTsKIAlzZXRfYXBwbHlfZXJyb3JfY29udGV4dF94YWN0KHhpZCwgY29tbWl0X2RhdGEuY29tbWl0 X2xzbik7CiAKLQllbG9nKERFQlVHMSwgInJlY2VpdmVkIGNvbW1pdCBmb3Igc3RyZWFtZWQgdHJh bnNhY3Rpb24gJXUiLCB4aWQpOworCWFwcGx5X2FjdGlvbiA9IGdldF90cmFuc2FjdGlvbl9hcHBs eV9hY3Rpb24oeGlkLCAmd2luZm8pOwogCi0JYXBwbHlfc3Bvb2xlZF9tZXNzYWdlcyh4aWQsIGNv bW1pdF9kYXRhLmNvbW1pdF9sc24pOworCXN3aXRjaCAoYXBwbHlfYWN0aW9uKQorCXsKKwkJY2Fz ZSBUUkFOU19MRUFERVJfU0VSSUFMSVpFOgogCi0JYXBwbHlfaGFuZGxlX2NvbW1pdF9pbnRlcm5h bCgmY29tbWl0X2RhdGEpOworCQkJLyoKKwkJCSAqIFRoZSB0cmFuc2FjdGlvbiBoYXMgYmVlbiBz ZXJpYWxpemVkIHRvIGZpbGUsIHNvIHJlcGxheSBhbGwgdGhlCisJCQkgKiBzcG9vbGVkIG9wZXJh dGlvbnMuCisJCQkgKi8KKwkJCWFwcGx5X3Nwb29sZWRfbWVzc2FnZXMoTXlMb2dpY2FsUmVwV29y a2VyLT5zdHJlYW1fZmlsZXNldCwgeGlkLAorCQkJCQkJCQkgICBjb21taXRfZGF0YS5jb21taXRf bHNuKTsKKworCQkJYXBwbHlfaGFuZGxlX2NvbW1pdF9pbnRlcm5hbCgmY29tbWl0X2RhdGEpOwor CisJCQkvKiBVbmxpbmsgdGhlIGZpbGVzIHdpdGggc2VyaWFsaXplZCBjaGFuZ2VzIGFuZCBzdWJ4 YWN0IGluZm8uICovCisJCQlzdHJlYW1fY2xlYW51cF9maWxlcyhNeUxvZ2ljYWxSZXBXb3JrZXIt PnN1YmlkLCB4aWQpOworCisJCQllbG9nKERFQlVHMSwgImZpbmlzaGVkIHByb2Nlc3NpbmcgdGhl IFNUUkVBTSBDT01NSVQgY29tbWFuZCIpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUUkFOU19MRUFE RVJfU0VORF9UT19QQVJBTExFTDoKKwkJCUFzc2VydCh3aW5mbyk7CisKKwkJCWlmIChwYV9zZW5k X2RhdGEod2luZm8sIHMtPmxlbiwgcy0+ZGF0YSkpCisJCQl7CisJCQkJLyogRmluaXNoIHByb2Nl c3NpbmcgdGhlIHN0cmVhbWluZyB0cmFuc2FjdGlvbi4gKi8KKwkJCQlwYV94YWN0X2ZpbmlzaCh3 aW5mbywgY29tbWl0X2RhdGEuZW5kX2xzbik7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCS8qCisJ CQkgKiBTd2l0Y2ggdG8gc2VyaWFsaXplIG1vZGUgd2hlbiB3ZSBhcmUgbm90IGFibGUgdG8gc2Vu ZCB0aGUKKwkJCSAqIGNoYW5nZSB0byBwYXJhbGxlbCBhcHBseSB3b3JrZXIuCisJCQkgKi8KKwkJ CXBhX3N3aXRjaF90b19wYXJ0aWFsX3NlcmlhbGl6ZSh3aW5mbywgdHJ1ZSk7CisKKwkJCS8qIGZh bGwgdGhyb3VnaCAqLworCQljYXNlIFRSQU5TX0xFQURFUl9QQVJUSUFMX1NFUklBTElaRToKKwkJ CUFzc2VydCh3aW5mbyk7CisKKwkJCXN0cmVhbV9vcGVuX2FuZF93cml0ZV9jaGFuZ2UoeGlkLCBM T0dJQ0FMX1JFUF9NU0dfU1RSRUFNX0NPTU1JVCwKKwkJCQkJCQkJCQkgJm9yaWdpbmFsX21zZyk7 CisKKwkJCXBhX3NldF9maWxlc2V0X3N0YXRlKHdpbmZvLT5zaGFyZWQsIEZTX1NFUklBTElaRV9E T05FKTsKIAotCS8qIHVubGluayB0aGUgZmlsZXMgd2l0aCBzZXJpYWxpemVkIGNoYW5nZXMgYW5k IHN1YnhhY3QgaW5mbyAqLwotCXN0cmVhbV9jbGVhbnVwX2ZpbGVzKE15TG9naWNhbFJlcFdvcmtl ci0+c3ViaWQsIHhpZCk7CisJCQkvKiBGaW5pc2ggcHJvY2Vzc2luZyB0aGUgc3RyZWFtaW5nIHRy YW5zYWN0aW9uLiAqLworCQkJcGFfeGFjdF9maW5pc2god2luZm8sIGNvbW1pdF9kYXRhLmVuZF9s c24pOworCQkJYnJlYWs7CisKKwkJY2FzZSBUUkFOU19QQVJBTExFTF9BUFBMWToKKworCQkJLyoK KwkJCSAqIElmIHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgaXMgYXBwbHlpbmcgc3Bvb2xlZCBt ZXNzYWdlcyB0aGVuCisJCQkgKiBjbG9zZSB0aGUgZmlsZSBiZWZvcmUgY29tbWl0dGluZy4KKwkJ CSAqLworCQkJaWYgKHN0cmVhbV9mZCkKKwkJCQlzdHJlYW1fY2xvc2VfZmlsZSgpOworCisJCQlh cHBseV9oYW5kbGVfY29tbWl0X2ludGVybmFsKCZjb21taXRfZGF0YSk7CisKKwkJCU15UGFyYWxs ZWxTaGFyZWQtPmxhc3RfY29tbWl0X2VuZCA9IFhhY3RMYXN0Q29tbWl0RW5kOworCisJCQkvKgor CQkJICogSXQgaXMgaW1wb3J0YW50IHRvIHNldCB0aGUgdHJhbnNhY3Rpb24gc3RhdGUgYXMgZmlu aXNoZWQgYmVmb3JlCisJCQkgKiByZWxlYXNpbmcgdGhlIGxvY2suIFNlZSBwYV93YWl0X2Zvcl94 YWN0X2ZpbmlzaC4KKwkJCSAqLworCQkJcGFfc2V0X3hhY3Rfc3RhdGUoTXlQYXJhbGxlbFNoYXJl ZCwgUEFSQUxMRUxfVFJBTlNfRklOSVNIRUQpOworCQkJcGFfdW5sb2NrX3RyYW5zYWN0aW9uKHhp ZCwgQWNjZXNzRXhjbHVzaXZlTG9jayk7CisKKwkJCXBhX3Jlc2V0X3N1YnRyYW5zKCk7CisKKwkJ CWVsb2coREVCVUcxLCAiZmluaXNoZWQgcHJvY2Vzc2luZyB0aGUgU1RSRUFNIENPTU1JVCBjb21t YW5kIik7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJQXNzZXJ0KGZhbHNlKTsKKwkJCWJy ZWFrOworCX0KIAogCS8qIFByb2Nlc3MgYW55IHRhYmxlcyB0aGF0IGFyZSBiZWluZyBzeW5jaHJv bml6ZWQgaW4gcGFyYWxsZWwuICovCiAJcHJvY2Vzc19zeW5jaW5nX3RhYmxlcyhjb21taXRfZGF0 YS5lbmRfbHNuKTsKQEAgLTE1NTgsOSArMjI3NCwxNiBAQCBhcHBseV9oYW5kbGVfY29tbWl0X2lu dGVybmFsKExvZ2ljYWxSZXBDb21taXREYXRhICpjb21taXRfZGF0YSkKIAkJcmVwbG9yaWdpbl9z ZXNzaW9uX29yaWdpbl90aW1lc3RhbXAgPSBjb21taXRfZGF0YS0+Y29tbWl0dGltZTsKIAogCQlD b21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKworCQlpZiAoSXNUcmFuc2FjdGlvbkJsb2NrKCkp CisJCXsKKwkJCUVuZFRyYW5zYWN0aW9uQmxvY2soZmFsc2UpOworCQkJQ29tbWl0VHJhbnNhY3Rp b25Db21tYW5kKCk7CisJCX0KKwogCQlwZ3N0YXRfcmVwb3J0X3N0YXQoZmFsc2UpOwogCi0JCXN0 b3JlX2ZsdXNoX3Bvc2l0aW9uKGNvbW1pdF9kYXRhLT5lbmRfbHNuKTsKKwkJc3RvcmVfZmx1c2hf cG9zaXRpb24oY29tbWl0X2RhdGEtPmVuZF9sc24sIFhhY3RMYXN0Q29tbWl0RW5kKTsKIAl9CiAJ ZWxzZQogCXsKQEAgLTI1MTEsNyArMzIzNCw3IEBAIGFwcGx5X2hhbmRsZV90cnVuY2F0ZShTdHJp bmdJbmZvIHMpCiAvKgogICogTG9naWNhbCByZXBsaWNhdGlvbiBwcm90b2NvbCBtZXNzYWdlIGRp c3BhdGNoZXIuCiAgKi8KLXN0YXRpYyB2b2lkCit2b2lkCiBhcHBseV9kaXNwYXRjaChTdHJpbmdJ bmZvIHMpCiB7CiAJTG9naWNhbFJlcE1zZ1R5cGUgYWN0aW9uID0gcHFfZ2V0bXNnYnl0ZShzKTsK QEAgLTI2NzUsMTcgKzMzOTgsMjQgQEAgZ2V0X2ZsdXNoX3Bvc2l0aW9uKFhMb2dSZWNQdHIgKndy aXRlLCBYTG9nUmVjUHRyICpmbHVzaCwKIC8qCiAgKiBTdG9yZSBjdXJyZW50IHJlbW90ZS9sb2Nh bCBsc24gcGFpciBpbiB0aGUgdHJhY2tpbmcgbGlzdC4KICAqLwotc3RhdGljIHZvaWQKLXN0b3Jl X2ZsdXNoX3Bvc2l0aW9uKFhMb2dSZWNQdHIgcmVtb3RlX2xzbikKK3ZvaWQKK3N0b3JlX2ZsdXNo X3Bvc2l0aW9uKFhMb2dSZWNQdHIgcmVtb3RlX2xzbiwgWExvZ1JlY1B0ciBsb2NhbF9sc24pCiB7 CiAJRmx1c2hQb3NpdGlvbiAqZmx1c2hwb3M7CiAKKwkvKgorCSAqIFNraXAgZm9yIHBhcmFsbGVs IGFwcGx5IHdvcmtlcnMsIGJlY2F1c2UgdGhlIGxzbl9tYXBwaW5nIGlzIG1haW50YWluZWQKKwkg KiBieSB0aGUgbGVhZGVyIGFwcGx5IHdvcmtlci4KKwkgKi8KKwlpZiAoYW1fcGFyYWxsZWxfYXBw bHlfd29ya2VyKCkpCisJCXJldHVybjsKKwogCS8qIE5lZWQgdG8gZG8gdGhpcyBpbiBwZXJtYW5l bnQgY29udGV4dCAqLwogCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhBcHBseUNvbnRleHQpOwogCiAJ LyogVHJhY2sgY29tbWl0IGxzbiAgKi8KIAlmbHVzaHBvcyA9IChGbHVzaFBvc2l0aW9uICopIHBh bGxvYyhzaXplb2YoRmx1c2hQb3NpdGlvbikpOwotCWZsdXNocG9zLT5sb2NhbF9lbmQgPSBYYWN0 TGFzdENvbW1pdEVuZDsKKwlmbHVzaHBvcy0+bG9jYWxfZW5kID0gbG9jYWxfbHNuOwogCWZsdXNo cG9zLT5yZW1vdGVfZW5kID0gcmVtb3RlX2xzbjsKIAogCWRsaXN0X3B1c2hfdGFpbCgmbHNuX21h cHBpbmcsICZmbHVzaHBvcy0+bm9kZSk7CkBAIC0yNzQ0LDYgKzM0NzQsNyBAQCBMb2dpY2FsUmVw QXBwbHlMb29wKFhMb2dSZWNQdHIgbGFzdF9yZWNlaXZlZCkKIAllcnJjYWxsYmFjay5jYWxsYmFj ayA9IGFwcGx5X2Vycm9yX2NhbGxiYWNrOwogCWVycmNhbGxiYWNrLnByZXZpb3VzID0gZXJyb3Jf Y29udGV4dF9zdGFjazsKIAllcnJvcl9jb250ZXh0X3N0YWNrID0gJmVycmNhbGxiYWNrOworCWFw cGx5X2Vycm9yX2NvbnRleHRfc3RhY2sgPSBlcnJvcl9jb250ZXh0X3N0YWNrOwogCiAJLyogVGhp cyBvdXRlciBsb29wIGl0ZXJhdGVzIG9uY2UgcGVyIHdhaXQuICovCiAJZm9yICg7OykKQEAgLTI5 NTgsNiArMzY4OSw3IEBAIExvZ2ljYWxSZXBBcHBseUxvb3AoWExvZ1JlY1B0ciBsYXN0X3JlY2Vp dmVkKQogCiAJLyogUG9wIHRoZSBlcnJvciBjb250ZXh0IHN0YWNrICovCiAJZXJyb3JfY29udGV4 dF9zdGFjayA9IGVycmNhbGxiYWNrLnByZXZpb3VzOworCWFwcGx5X2Vycm9yX2NvbnRleHRfc3Rh Y2sgPSBlcnJvcl9jb250ZXh0X3N0YWNrOwogCiAJLyogQWxsIGRvbmUgKi8KIAl3YWxyY3ZfZW5k c3RyZWFtaW5nKExvZ1JlcFdvcmtlcldhbFJjdkNvbm4sICZ0bGkpOwpAQCAtMzA1Niw5ICszNzg4 LDMxIEBAIHNlbmRfZmVlZGJhY2soWExvZ1JlY1B0ciByZWN2cG9zLCBib29sIGZvcmNlLCBib29s IHJlcXVlc3RSZXBseSkKIH0KIAogLyoKLSAqIFJlcmVhZCBzdWJzY3JpcHRpb24gaW5mbyBpZiBu ZWVkZWQuIE1vc3QgY2hhbmdlcyB3aWxsIGJlIGV4aXQuCisgKiBFeGl0IHJvdXRpbmUgZm9yIGFw cGx5IHdvcmtlcnMgZHVlIHRvIHN1YnNjcmlwdGlvbiBwYXJhbWV0ZXIgY2hhbmdlcy4KICAqLwog c3RhdGljIHZvaWQKK2FwcGx5X3dvcmtlcl9leGl0KHZvaWQpCit7CisJaWYgKGFtX3BhcmFsbGVs X2FwcGx5X3dvcmtlcigpKQorCXsKKwkJLyoKKwkJICogRG9uJ3Qgc3RvcCB0aGUgcGFyYWxsZWwg YXBwbHkgd29ya2VyIGFzIHRoZSBsZWFkZXIgd2lsbCBkZXRlY3QgdGhlCisJCSAqIHN1YnNjcmlw dGlvbiBwYXJhbWV0ZXIgY2hhbmdlIGFuZCByZXN0YXJ0IGxvZ2ljYWwgcmVwbGljYXRpb24gbGF0 ZXIKKwkJICogYW55d2F5LiBUaGlzIGFsc28gcHJldmVudHMgdGhlIGxlYWRlciBmcm9tIHJlcG9y dGluZyBlcnJvcnMgd2hlbgorCQkgKiB0cnlpbmcgdG8gY29tbXVuaWNhdGUgd2l0aCBhIHN0b3Bw ZWQgcGFyYWxsZWwgYXBwbHkgd29ya2VyLCB3aGljaAorCQkgKiB3b3VsZCBhY2NpZGVudGFsbHkg ZGlzYWJsZSBzdWJzY3JpcHRpb25zIGlmIGRpc2FibGVfb25fZXJyb3Igd2FzCisJCSAqIHNldC4K KwkJICovCisJCXJldHVybjsKKwl9CisKKwlwcm9jX2V4aXQoMCk7Cit9CisKKy8qCisgKiBSZXJl YWQgc3Vic2NyaXB0aW9uIGluZm8gaWYgbmVlZGVkLiBNb3N0IGNoYW5nZXMgd2lsbCBiZSBleGl0 LgorICovCit2b2lkCiBtYXliZV9yZXJlYWRfc3Vic2NyaXB0aW9uKHZvaWQpCiB7CiAJTWVtb3J5 Q29udGV4dCBvbGRjdHg7CkBAIC0zMDg4LDkgKzM4NDIsOSBAQCBtYXliZV9yZXJlYWRfc3Vic2Ny aXB0aW9uKHZvaWQpCiAJaWYgKCFuZXdzdWIpCiAJewogCQllcmVwb3J0KExPRywKLQkJCQkoZXJy bXNnKCJsb2dpY2FsIHJlcGxpY2F0aW9uIGFwcGx5IHdvcmtlciBmb3Igc3Vic2NyaXB0aW9uIFwi JXNcIiB3aWxsICIKLQkJCQkJCSJzdG9wIGJlY2F1c2UgdGhlIHN1YnNjcmlwdGlvbiB3YXMgcmVt b3ZlZCIsCi0JCQkJCQlNeVN1YnNjcmlwdGlvbi0+bmFtZSkpKTsKKwkJLyogdHJhbnNsYXRvcjog Zmlyc3QgJXMgaXMgdGhlIG5hbWUgb2YgbG9naWNhbCByZXBsaWNhdGlvbiB3b3JrZXIgKi8KKwkJ CQkoZXJybXNnKCIlcyBmb3Igc3Vic2NyaXB0aW9uIFwiJXNcIiB3aWxsIHN0b3AgYmVjYXVzZSB0 aGUgc3Vic2NyaXB0aW9uIHdhcyByZW1vdmVkIiwKKwkJCQkJCWdldF93b3JrZXJfbmFtZSgpLCBN eVN1YnNjcmlwdGlvbi0+bmFtZSkpKTsKIAogCQlwcm9jX2V4aXQoMCk7CiAJfQpAQCAtMzA5OSwx MSArMzg1MywxMSBAQCBtYXliZV9yZXJlYWRfc3Vic2NyaXB0aW9uKHZvaWQpCiAJaWYgKCFuZXdz dWItPmVuYWJsZWQpCiAJewogCQllcmVwb3J0KExPRywKLQkJCQkoZXJybXNnKCJsb2dpY2FsIHJl cGxpY2F0aW9uIGFwcGx5IHdvcmtlciBmb3Igc3Vic2NyaXB0aW9uIFwiJXNcIiB3aWxsICIKLQkJ CQkJCSJzdG9wIGJlY2F1c2UgdGhlIHN1YnNjcmlwdGlvbiB3YXMgZGlzYWJsZWQiLAotCQkJCQkJ TXlTdWJzY3JpcHRpb24tPm5hbWUpKSk7CisJCS8qIHRyYW5zbGF0b3I6IGZpcnN0ICVzIGlzIHRo ZSBuYW1lIG9mIGxvZ2ljYWwgcmVwbGljYXRpb24gd29ya2VyICovCisJCQkJKGVycm1zZygiJXMg Zm9yIHN1YnNjcmlwdGlvbiBcIiVzXCIgd2lsbCBzdG9wIGJlY2F1c2UgdGhlIHN1YnNjcmlwdGlv biB3YXMgZGlzYWJsZWQiLAorCQkJCQkJZ2V0X3dvcmtlcl9uYW1lKCksIE15U3Vic2NyaXB0aW9u LT5uYW1lKSkpOwogCi0JCXByb2NfZXhpdCgwKTsKKwkJYXBwbHlfd29ya2VyX2V4aXQoKTsKIAl9 CiAKIAkvKiAhc2xvdG5hbWUgc2hvdWxkIG5ldmVyIGhhcHBlbiB3aGVuIGVuYWJsZWQgaXMgdHJ1 ZS4gKi8KQEAgLTMxMTQsNyArMzg2OCwxMCBAQCBtYXliZV9yZXJlYWRfc3Vic2NyaXB0aW9uKHZv aWQpCiAKIAkvKgogCSAqIEV4aXQgaWYgYW55IHBhcmFtZXRlciB0aGF0IGFmZmVjdHMgdGhlIHJl bW90ZSBjb25uZWN0aW9uIHdhcyBjaGFuZ2VkLgotCSAqIFRoZSBsYXVuY2hlciB3aWxsIHN0YXJ0 IGEgbmV3IHdvcmtlci4KKwkgKiBUaGUgbGF1bmNoZXIgd2lsbCBzdGFydCBhIG5ldyB3b3JrZXIg YnV0IG5vdGUgdGhhdCB0aGUgcGFyYWxsZWwgYXBwbHkKKwkgKiB3b3JrZXIgd29uJ3QgcmVzdGFy dCBpZiB0aGUgc3RyZWFtaW5nIG9wdGlvbidzIHZhbHVlIGlzIGNoYW5nZWQgZnJvbQorCSAqICdw YXJhbGxlbCcgdG8gYW55IG90aGVyIHZhbHVlIG9yIHRoZSBzZXJ2ZXIgZGVjaWRlcyBub3QgdG8g c3RyZWFtIHRoZQorCSAqIGluLXByb2dyZXNzIHRyYW5zYWN0aW9uLgogCSAqLwogCWlmIChzdHJj bXAobmV3c3ViLT5jb25uaW5mbywgTXlTdWJzY3JpcHRpb24tPmNvbm5pbmZvKSAhPSAwIHx8CiAJ CXN0cmNtcChuZXdzdWItPm5hbWUsIE15U3Vic2NyaXB0aW9uLT5uYW1lKSAhPSAwIHx8CkBAIC0z MTI1LDExICszODgyLDE3IEBAIG1heWJlX3JlcmVhZF9zdWJzY3JpcHRpb24odm9pZCkKIAkJbmV3 c3ViLT5vd25lciAhPSBNeVN1YnNjcmlwdGlvbi0+b3duZXIgfHwKIAkJIWVxdWFsKG5ld3N1Yi0+ cHVibGljYXRpb25zLCBNeVN1YnNjcmlwdGlvbi0+cHVibGljYXRpb25zKSkKIAl7Ci0JCWVyZXBv cnQoTE9HLAotCQkJCShlcnJtc2coImxvZ2ljYWwgcmVwbGljYXRpb24gYXBwbHkgd29ya2VyIGZv ciBzdWJzY3JpcHRpb24gXCIlc1wiIHdpbGwgcmVzdGFydCBiZWNhdXNlIG9mIGEgcGFyYW1ldGVy IGNoYW5nZSIsCi0JCQkJCQlNeVN1YnNjcmlwdGlvbi0+bmFtZSkpKTsKKwkJaWYgKGFtX3BhcmFs bGVsX2FwcGx5X3dvcmtlcigpKQorCQkJZXJlcG9ydChMT0csCisJCQkJCShlcnJtc2coImxvZ2lj YWwgcmVwbGljYXRpb24gcGFyYWxsZWwgYXBwbHkgd29ya2VyIGZvciBzdWJzY3JpcHRpb24gXCIl c1wiIHdpbGwgc3RvcCBiZWNhdXNlIG9mIGEgcGFyYW1ldGVyIGNoYW5nZSIsCisJCQkJCQkJTXlT dWJzY3JpcHRpb24tPm5hbWUpKSk7CisJCWVsc2UKKwkJCWVyZXBvcnQoTE9HLAorCQkJLyogdHJh bnNsYXRvcjogZmlyc3QgJXMgaXMgdGhlIG5hbWUgb2YgbG9naWNhbCByZXBsaWNhdGlvbiB3b3Jr ZXIgKi8KKwkJCQkJKGVycm1zZygiJXMgZm9yIHN1YnNjcmlwdGlvbiBcIiVzXCIgd2lsbCByZXN0 YXJ0IGJlY2F1c2Ugb2YgYSBwYXJhbWV0ZXIgY2hhbmdlIiwKKwkJCQkJCQlnZXRfd29ya2VyX25h bWUoKSwgTXlTdWJzY3JpcHRpb24tPm5hbWUpKSk7CiAKLQkJcHJvY19leGl0KDApOworCQlhcHBs eV93b3JrZXJfZXhpdCgpOwogCX0KIAogCS8qIENoZWNrIGZvciBvdGhlciBjaGFuZ2VzIHRoYXQg c2hvdWxkIG5ldmVyIGhhcHBlbiB0b28uICovCkBAIC0zMzgxLDcgKzQxNDQsNyBAQCBjaGFuZ2Vz X2ZpbGVuYW1lKGNoYXIgKnBhdGgsIE9pZCBzdWJpZCwgVHJhbnNhY3Rpb25JZCB4aWQpCiAgKiB0 b3BsZXZlbCB0cmFuc2FjdGlvbi4gRWFjaCBzdWJzY3JpcHRpb24gaGFzIGEgc2VwYXJhdGUgc2V0 IG9mIGZpbGVzCiAgKiBmb3IgYW55IHRvcGxldmVsIHRyYW5zYWN0aW9uLgogICovCi1zdGF0aWMg dm9pZAordm9pZAogc3RyZWFtX2NsZWFudXBfZmlsZXMoT2lkIHN1YmlkLCBUcmFuc2FjdGlvbklk IHhpZCkKIHsKIAljaGFyCQlwYXRoW01BWFBHUEFUSF07CkBAIC0zNDA0LDkgKzQxNjcsNiBAQCBz dHJlYW1fY2xlYW51cF9maWxlcyhPaWQgc3ViaWQsIFRyYW5zYWN0aW9uSWQgeGlkKQogICogYnkg c3RyZWFtX3hpZCAoZ2xvYmFsIHZhcmlhYmxlKS4gSWYgaXQncyB0aGUgZmlyc3QgY2h1bmsgb2Yg c3RyZWFtZWQKICAqIGNoYW5nZXMgZm9yIHRoaXMgdHJhbnNhY3Rpb24sIGNyZWF0ZSB0aGUgYnVm ZmlsZSwgb3RoZXJ3aXNlIG9wZW4gdGhlCiAgKiBwcmV2aW91c2x5IGNyZWF0ZWQgZmlsZS4KLSAq Ci0gKiBUaGlzIGNhbiBvbmx5IGJlIGNhbGxlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgInN0cmVh bWluZyIgYmxvY2ssIGkuZS4KLSAqIGJldHdlZW4gc3RyZWFtX3N0YXJ0L3N0cmVhbV9zdG9wIG1l c3NhZ2VzIGZyb20gdGhlIHVwc3RyZWFtLgogICovCiBzdGF0aWMgdm9pZAogc3RyZWFtX29wZW5f ZmlsZShPaWQgc3ViaWQsIFRyYW5zYWN0aW9uSWQgeGlkLCBib29sIGZpcnN0X3NlZ21lbnQpCkBA IC0zNDE0LDcgKzQxNzQsNiBAQCBzdHJlYW1fb3Blbl9maWxlKE9pZCBzdWJpZCwgVHJhbnNhY3Rp b25JZCB4aWQsIGJvb2wgZmlyc3Rfc2VnbWVudCkKIAljaGFyCQlwYXRoW01BWFBHUEFUSF07CiAJ TWVtb3J5Q29udGV4dCBvbGRjeHQ7CiAKLQlBc3NlcnQoaW5fc3RyZWFtZWRfdHJhbnNhY3Rpb24p OwogCUFzc2VydChPaWRJc1ZhbGlkKHN1YmlkKSk7CiAJQXNzZXJ0KFRyYW5zYWN0aW9uSWRJc1Zh bGlkKHhpZCkpOwogCUFzc2VydChzdHJlYW1fZmQgPT0gTlVMTCk7CkBAIC0zNDUzLDE1ICs0MjEy LDEwIEBAIHN0cmVhbV9vcGVuX2ZpbGUoT2lkIHN1YmlkLCBUcmFuc2FjdGlvbklkIHhpZCwgYm9v bCBmaXJzdF9zZWdtZW50KQogLyoKICAqIHN0cmVhbV9jbG9zZV9maWxlCiAgKgkgIENsb3NlIHRo ZSBjdXJyZW50bHkgb3BlbiBmaWxlIHdpdGggc3RyZWFtZWQgY2hhbmdlcy4KLSAqCi0gKiBUaGlz IGNhbiBvbmx5IGJlIGNhbGxlZCBhdCB0aGUgZW5kIG9mIGEgc3RyZWFtaW5nIGJsb2NrLCBpLmUu IGF0IHN0cmVhbV9zdG9wCi0gKiBtZXNzYWdlIGZyb20gdGhlIHVwc3RyZWFtLgogICovCiBzdGF0 aWMgdm9pZAogc3RyZWFtX2Nsb3NlX2ZpbGUodm9pZCkKIHsKLQlBc3NlcnQoaW5fc3RyZWFtZWRf dHJhbnNhY3Rpb24pOwotCUFzc2VydChUcmFuc2FjdGlvbklkSXNWYWxpZChzdHJlYW1feGlkKSk7 CiAJQXNzZXJ0KHN0cmVhbV9mZCAhPSBOVUxMKTsKIAogCUJ1ZkZpbGVDbG9zZShzdHJlYW1fZmQp OwpAQCAtMzQ4Myw4ICs0MjM3LDYgQEAgc3RyZWFtX3dyaXRlX2NoYW5nZShjaGFyIGFjdGlvbiwg U3RyaW5nSW5mbyBzKQogewogCWludAkJCWxlbjsKIAotCUFzc2VydChpbl9zdHJlYW1lZF90cmFu c2FjdGlvbik7Ci0JQXNzZXJ0KFRyYW5zYWN0aW9uSWRJc1ZhbGlkKHN0cmVhbV94aWQpKTsKIAlB c3NlcnQoc3RyZWFtX2ZkICE9IE5VTEwpOwogCiAJLyogdG90YWwgb24tZGlzayBzaXplLCBpbmNs dWRpbmcgdGhlIGFjdGlvbiB0eXBlIGNoYXJhY3RlciAqLwpAQCAtMzUwMiw2ICs0MjU0LDI2IEBA IHN0cmVhbV93cml0ZV9jaGFuZ2UoY2hhciBhY3Rpb24sIFN0cmluZ0luZm8gcykKIAlCdWZGaWxl V3JpdGUoc3RyZWFtX2ZkLCAmcy0+ZGF0YVtzLT5jdXJzb3JdLCBsZW4pOwogfQogCisvKgorICog c3RyZWFtX29wZW5fYW5kX3dyaXRlX2NoYW5nZQorICoJICBTZXJpYWxpemUgYSBtZXNzYWdlIHRv IGEgZmlsZSBmb3IgdGhlIGdpdmVuIHRyYW5zYWN0aW9uLgorICoKKyAqIFRoaXMgZnVuY3Rpb24g aXMgc2ltaWxhciB0byBzdHJlYW1fd3JpdGVfY2hhbmdlIGV4Y2VwdCB0aGF0IGl0IHdpbGwgb3Bl biB0aGUKKyAqIHRhcmdldCBmaWxlIGlmIG5vdCBhbHJlYWR5IGJlZm9yZSB3cml0aW5nIHRoZSBt ZXNzYWdlIGFuZCBjbG9zZSB0aGUgZmlsZSBhdAorICogdGhlIGVuZC4KKyAqLworc3RhdGljIHZv aWQKK3N0cmVhbV9vcGVuX2FuZF93cml0ZV9jaGFuZ2UoVHJhbnNhY3Rpb25JZCB4aWQsIGNoYXIg YWN0aW9uLCBTdHJpbmdJbmZvIHMpCit7CisJQXNzZXJ0KCFpbl9zdHJlYW1lZF90cmFuc2FjdGlv bik7CisKKwlpZiAoIXN0cmVhbV9mZCkKKwkJc3RyZWFtX3N0YXJ0X2ludGVybmFsKHhpZCwgZmFs c2UpOworCisJc3RyZWFtX3dyaXRlX2NoYW5nZShhY3Rpb24sIHMpOworCXN0cmVhbV9zdG9wX2lu dGVybmFsKHhpZCk7Cit9CisKIC8qCiAgKiBDbGVhbnVwIHRoZSBtZW1vcnkgZm9yIHN1YnhhY3Rz IGFuZCByZXNldCB0aGUgcmVsYXRlZCB2YXJpYWJsZXMuCiAgKi8KQEAgLTM2MTMsMzcgKzQzODUs MTYgQEAgc3RhcnRfYXBwbHkoWExvZ1JlY1B0ciBvcmlnaW5fc3RhcnRwb3MpCiAJUEdfRU5EX1RS WSgpOwogfQogCi0vKiBMb2dpY2FsIFJlcGxpY2F0aW9uIEFwcGx5IHdvcmtlciBlbnRyeSBwb2lu dCAqLworLyoKKyAqIENvbW1vbiBpbml0aWFsaXphdGlvbiBmb3IgbGVhZGVyIGFwcGx5IHdvcmtl ciBhbmQgcGFyYWxsZWwgYXBwbHkgd29ya2VyLgorICoKKyAqIEluaXRpYWxpemUgdGhlIGRhdGFi YXNlIGNvbm5lY3Rpb24sIGluLW1lbW9yeSBzdWJzY3JpcHRpb24gYW5kIG5lY2Vzc2FyeQorICog Y29uZmlnIG9wdGlvbnMuCisgKi8KIHZvaWQKLUFwcGx5V29ya2VyTWFpbihEYXR1bSBtYWluX2Fy ZykKK0luaXRpYWxpemVBcHBseVdvcmtlcih2b2lkKQogewotCWludAkJCXdvcmtlcl9zbG90ID0g RGF0dW1HZXRJbnQzMihtYWluX2FyZyk7CiAJTWVtb3J5Q29udGV4dCBvbGRjdHg7Ci0JY2hhcgkJ b3JpZ2lubmFtZVtOQU1FREFUQUxFTl07Ci0JWExvZ1JlY1B0cglvcmlnaW5fc3RhcnRwb3MgPSBJ bnZhbGlkWExvZ1JlY1B0cjsKLQljaGFyCSAgICpteXNsb3RuYW1lID0gTlVMTDsKLQlXYWxSY3ZT dHJlYW1PcHRpb25zIG9wdGlvbnM7Ci0JaW50CQkJc2VydmVyX3ZlcnNpb247Ci0KLQkvKiBBdHRh Y2ggdG8gc2xvdCAqLwotCWxvZ2ljYWxyZXBfd29ya2VyX2F0dGFjaCh3b3JrZXJfc2xvdCk7Ci0K LQkvKiBTZXR1cCBzaWduYWwgaGFuZGxpbmcgKi8KLQlwcXNpZ25hbChTSUdIVVAsIFNpZ25hbEhh bmRsZXJGb3JDb25maWdSZWxvYWQpOwotCXBxc2lnbmFsKFNJR1RFUk0sIGRpZSk7Ci0JQmFja2dy b3VuZFdvcmtlclVuYmxvY2tTaWduYWxzKCk7Ci0KLQkvKgotCSAqIFdlIGRvbid0IGN1cnJlbnRs eSBuZWVkIGFueSBSZXNvdXJjZU93bmVyIGluIGEgd2FscmVjZWl2ZXIgcHJvY2VzcywgYnV0Ci0J ICogaWYgd2UgZGlkLCB3ZSBjb3VsZCBjYWxsIENyZWF0ZUF1eFByb2Nlc3NSZXNvdXJjZU93bmVy IGhlcmUuCi0JICovCi0KLQkvKiBJbml0aWFsaXNlIHN0YXRzIHRvIGEgc2FuaXNoIHZhbHVlICov Ci0JTXlMb2dpY2FsUmVwV29ya2VyLT5sYXN0X3NlbmRfdGltZSA9IE15TG9naWNhbFJlcFdvcmtl ci0+bGFzdF9yZWN2X3RpbWUgPQotCQlNeUxvZ2ljYWxSZXBXb3JrZXItPnJlcGx5X3RpbWUgPSBH ZXRDdXJyZW50VGltZXN0YW1wKCk7Ci0KLQkvKiBMb2FkIHRoZSBsaWJwcS1zcGVjaWZpYyBmdW5j dGlvbnMgKi8KLQlsb2FkX2ZpbGUoImxpYnBxd2FscmVjZWl2ZXIiLCBmYWxzZSk7CiAKIAkvKiBS dW4gYXMgcmVwbGljYSBzZXNzaW9uIHJlcGxpY2F0aW9uIHJvbGUuICovCiAJU2V0Q29uZmlnT3B0 aW9uKCJzZXNzaW9uX3JlcGxpY2F0aW9uX3JvbGUiLCAicmVwbGljYSIsCkBAIC0zNjcxLDkgKzQ0 MjIsMTAgQEAgQXBwbHlXb3JrZXJNYWluKERhdHVtIG1haW5fYXJnKQogCWlmICghTXlTdWJzY3Jp cHRpb24pCiAJewogCQllcmVwb3J0KExPRywKLQkJCQkoZXJybXNnKCJsb2dpY2FsIHJlcGxpY2F0 aW9uIGFwcGx5IHdvcmtlciBmb3Igc3Vic2NyaXB0aW9uICV1IHdpbGwgbm90ICIKLQkJCQkJCSJz dGFydCBiZWNhdXNlIHRoZSBzdWJzY3JpcHRpb24gd2FzIHJlbW92ZWQgZHVyaW5nIHN0YXJ0dXAi LAotCQkJCQkJTXlMb2dpY2FsUmVwV29ya2VyLT5zdWJpZCkpKTsKKwkJLyogdHJhbnNsYXRvcjog JXMgaXMgdGhlIG5hbWUgb2YgbG9naWNhbCByZXBsaWNhdGlvbiB3b3JrZXIgKi8KKwkJCQkoZXJy bXNnKCIlcyBmb3Igc3Vic2NyaXB0aW9uICV1IHdpbGwgbm90IHN0YXJ0IGJlY2F1c2UgdGhlIHN1 YnNjcmlwdGlvbiB3YXMgcmVtb3ZlZCBkdXJpbmcgc3RhcnR1cCIsCisJCQkJCQlnZXRfd29ya2Vy X25hbWUoKSwgTXlMb2dpY2FsUmVwV29ya2VyLT5zdWJpZCkpKTsKKwogCQlwcm9jX2V4aXQoMCk7 CiAJfQogCkBAIC0zNjgzLDExICs0NDM1LDExIEBAIEFwcGx5V29ya2VyTWFpbihEYXR1bSBtYWlu X2FyZykKIAlpZiAoIU15U3Vic2NyaXB0aW9uLT5lbmFibGVkKQogCXsKIAkJZXJlcG9ydChMT0cs Ci0JCQkJKGVycm1zZygibG9naWNhbCByZXBsaWNhdGlvbiBhcHBseSB3b3JrZXIgZm9yIHN1YnNj cmlwdGlvbiBcIiVzXCIgd2lsbCBub3QgIgotCQkJCQkJInN0YXJ0IGJlY2F1c2UgdGhlIHN1YnNj cmlwdGlvbiB3YXMgZGlzYWJsZWQgZHVyaW5nIHN0YXJ0dXAiLAotCQkJCQkJTXlTdWJzY3JpcHRp b24tPm5hbWUpKSk7CisJCS8qIHRyYW5zbGF0b3I6IGZpcnN0ICVzIGlzIHRoZSBuYW1lIG9mIGxv Z2ljYWwgcmVwbGljYXRpb24gd29ya2VyICovCisJCQkJKGVycm1zZygiJXMgZm9yIHN1YnNjcmlw dGlvbiBcIiVzXCIgd2lsbCBub3Qgc3RhcnQgYmVjYXVzZSB0aGUgc3Vic2NyaXB0aW9uIHdhcyBk aXNhYmxlZCBkdXJpbmcgc3RhcnR1cCIsCisJCQkJCQlnZXRfd29ya2VyX25hbWUoKSwgTXlTdWJz Y3JpcHRpb24tPm5hbWUpKSk7CiAKLQkJcHJvY19leGl0KDApOworCQlhcHBseV93b3JrZXJfZXhp dCgpOwogCX0KIAogCS8qIFNldHVwIHN5bmNocm9ub3VzIGNvbW1pdCBhY2NvcmRpbmcgdG8gdGhl IHVzZXIncyB3aXNoZXMgKi8KQEAgLTM3MDIsMTMgKzQ0NTQsNDkgQEAgQXBwbHlXb3JrZXJNYWlu KERhdHVtIG1haW5fYXJnKQogCWlmIChhbV90YWJsZXN5bmNfd29ya2VyKCkpCiAJCWVyZXBvcnQo TE9HLAogCQkJCShlcnJtc2coImxvZ2ljYWwgcmVwbGljYXRpb24gdGFibGUgc3luY2hyb25pemF0 aW9uIHdvcmtlciBmb3Igc3Vic2NyaXB0aW9uIFwiJXNcIiwgdGFibGUgXCIlc1wiIGhhcyBzdGFy dGVkIiwKLQkJCQkJCU15U3Vic2NyaXB0aW9uLT5uYW1lLCBnZXRfcmVsX25hbWUoTXlMb2dpY2Fs UmVwV29ya2VyLT5yZWxpZCkpKSk7CisJCQkJCQlNeVN1YnNjcmlwdGlvbi0+bmFtZSwKKwkJCQkJ CWdldF9yZWxfbmFtZShNeUxvZ2ljYWxSZXBXb3JrZXItPnJlbGlkKSkpKTsKIAllbHNlCiAJCWVy ZXBvcnQoTE9HLAotCQkJCShlcnJtc2coImxvZ2ljYWwgcmVwbGljYXRpb24gYXBwbHkgd29ya2Vy IGZvciBzdWJzY3JpcHRpb24gXCIlc1wiIGhhcyBzdGFydGVkIiwKLQkJCQkJCU15U3Vic2NyaXB0 aW9uLT5uYW1lKSkpOworCQkvKiB0cmFuc2xhdG9yOiBmaXJzdCAlcyBpcyB0aGUgbmFtZSBvZiBs b2dpY2FsIHJlcGxpY2F0aW9uIHdvcmtlciAqLworCQkJCShlcnJtc2coIiVzIGZvciBzdWJzY3Jp cHRpb24gXCIlc1wiIGhhcyBzdGFydGVkIiwKKwkJCQkJCWdldF93b3JrZXJfbmFtZSgpLCBNeVN1 YnNjcmlwdGlvbi0+bmFtZSkpKTsKIAogCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOworfQor CisvKiBMb2dpY2FsIFJlcGxpY2F0aW9uIEFwcGx5IHdvcmtlciBlbnRyeSBwb2ludCAqLwordm9p ZAorQXBwbHlXb3JrZXJNYWluKERhdHVtIG1haW5fYXJnKQoreworCWludAkJCXdvcmtlcl9zbG90 ID0gRGF0dW1HZXRJbnQzMihtYWluX2FyZyk7CisJY2hhcgkJb3JpZ2lubmFtZVtOQU1FREFUQUxF Tl07CisJWExvZ1JlY1B0cglvcmlnaW5fc3RhcnRwb3MgPSBJbnZhbGlkWExvZ1JlY1B0cjsKKwlj aGFyCSAgICpteXNsb3RuYW1lID0gTlVMTDsKKwlXYWxSY3ZTdHJlYW1PcHRpb25zIG9wdGlvbnM7 CisJaW50CQkJc2VydmVyX3ZlcnNpb247CisKKwkvKiBBdHRhY2ggdG8gc2xvdCAqLworCWxvZ2lj YWxyZXBfd29ya2VyX2F0dGFjaCh3b3JrZXJfc2xvdCk7CisKKwkvKiBTZXR1cCBzaWduYWwgaGFu ZGxpbmcgKi8KKwlwcXNpZ25hbChTSUdIVVAsIFNpZ25hbEhhbmRsZXJGb3JDb25maWdSZWxvYWQp OworCXBxc2lnbmFsKFNJR1RFUk0sIGRpZSk7CisJQmFja2dyb3VuZFdvcmtlclVuYmxvY2tTaWdu YWxzKCk7CisKKwkvKgorCSAqIFdlIGRvbid0IGN1cnJlbnRseSBuZWVkIGFueSBSZXNvdXJjZU93 bmVyIGluIGEgd2FscmVjZWl2ZXIgcHJvY2VzcywgYnV0CisJICogaWYgd2UgZGlkLCB3ZSBjb3Vs ZCBjYWxsIENyZWF0ZUF1eFByb2Nlc3NSZXNvdXJjZU93bmVyIGhlcmUuCisJICovCisKKwkvKiBJ bml0aWFsaXNlIHN0YXRzIHRvIGEgc2FuaXNoIHZhbHVlICovCisJTXlMb2dpY2FsUmVwV29ya2Vy LT5sYXN0X3NlbmRfdGltZSA9IE15TG9naWNhbFJlcFdvcmtlci0+bGFzdF9yZWN2X3RpbWUgPQor CQlNeUxvZ2ljYWxSZXBXb3JrZXItPnJlcGx5X3RpbWUgPSBHZXRDdXJyZW50VGltZXN0YW1wKCk7 CisKKwkvKiBMb2FkIHRoZSBsaWJwcS1zcGVjaWZpYyBmdW5jdGlvbnMgKi8KKwlsb2FkX2ZpbGUo ImxpYnBxd2FscmVjZWl2ZXIiLCBmYWxzZSk7CisKKwlJbml0aWFsaXplQXBwbHlXb3JrZXIoKTsK IAogCS8qIENvbm5lY3QgdG8gdGhlIG9yaWdpbiBhbmQgc3RhcnQgdGhlIHJlcGxpY2F0aW9uLiAq LwogCWVsb2coREVCVUcxLCAiY29ubmVjdGluZyB0byBwdWJsaXNoZXIgdXNpbmcgY29ubmVjdGlv biBzdHJpbmcgXCIlc1wiIiwKQEAgLTM3MTgsMjAgKzQ1MDYsMTUgQEAgQXBwbHlXb3JrZXJNYWlu KERhdHVtIG1haW5fYXJnKQogCXsKIAkJc3RhcnRfdGFibGVfc3luYygmb3JpZ2luX3N0YXJ0cG9z LCAmbXlzbG90bmFtZSk7CiAKLQkJLyoKLQkJICogQWxsb2NhdGUgdGhlIG9yaWdpbiBuYW1lIGlu IGxvbmctbGl2ZWQgY29udGV4dCBmb3IgZXJyb3IgY29udGV4dAotCQkgKiBtZXNzYWdlLgotCQkg Ki8KIAkJUmVwbGljYXRpb25PcmlnaW5OYW1lRm9yTG9naWNhbFJlcChNeVN1YnNjcmlwdGlvbi0+ b2lkLAogCQkJCQkJCQkJCSAgIE15TG9naWNhbFJlcFdvcmtlci0+cmVsaWQsCiAJCQkJCQkJCQkJ ICAgb3JpZ2lubmFtZSwKIAkJCQkJCQkJCQkgICBzaXplb2Yob3JpZ2lubmFtZSkpOwotCQlhcHBs eV9lcnJvcl9jYWxsYmFja19hcmcub3JpZ2luX25hbWUgPSBNZW1vcnlDb250ZXh0U3RyZHVwKEFw cGx5Q29udGV4dCwKLQkJCQkJCQkJCQkJCQkJCQkgICBvcmlnaW5uYW1lKTsKKwkJc2V0X2FwcGx5 X2Vycm9yX2NvbnRleHRfb3JpZ2luKG9yaWdpbm5hbWUpOwogCX0KIAllbHNlCiAJewotCQkvKiBU aGlzIGlzIG1haW4gYXBwbHkgd29ya2VyICovCisJCS8qIFRoaXMgaXMgdGhlIGxlYWRlciBhcHBs eSB3b3JrZXIgKi8KIAkJUmVwT3JpZ2luSWQgb3JpZ2luaWQ7CiAJCVRpbWVMaW5lSUQJc3RhcnRw b2ludFRMSTsKIAkJY2hhcgkgICAqZXJyOwpAQCAtMzc1NSw3ICs0NTM4LDcgQEAgQXBwbHlXb3Jr ZXJNYWluKERhdHVtIG1haW5fYXJnKQogCQlvcmlnaW5pZCA9IHJlcGxvcmlnaW5fYnlfbmFtZShv cmlnaW5uYW1lLCB0cnVlKTsKIAkJaWYgKCFPaWRJc1ZhbGlkKG9yaWdpbmlkKSkKIAkJCW9yaWdp bmlkID0gcmVwbG9yaWdpbl9jcmVhdGUob3JpZ2lubmFtZSk7Ci0JCXJlcGxvcmlnaW5fc2Vzc2lv bl9zZXR1cChvcmlnaW5pZCk7CisJCXJlcGxvcmlnaW5fc2Vzc2lvbl9zZXR1cChvcmlnaW5pZCwg MCk7CiAJCXJlcGxvcmlnaW5fc2Vzc2lvbl9vcmlnaW4gPSBvcmlnaW5pZDsKIAkJb3JpZ2luX3N0 YXJ0cG9zID0gcmVwbG9yaWdpbl9zZXNzaW9uX2dldF9wcm9ncmVzcyhmYWxzZSk7CiAJCUNvbW1p dFRyYW5zYWN0aW9uQ29tbWFuZCgpOwpAQCAtMzc3MywxMiArNDU1Niw3IEBAIEFwcGx5V29ya2Vy TWFpbihEYXR1bSBtYWluX2FyZykKIAkJICovCiAJCSh2b2lkKSB3YWxyY3ZfaWRlbnRpZnlfc3lz dGVtKExvZ1JlcFdvcmtlcldhbFJjdkNvbm4sICZzdGFydHBvaW50VExJKTsKIAotCQkvKgotCQkg KiBBbGxvY2F0ZSB0aGUgb3JpZ2luIG5hbWUgaW4gbG9uZy1saXZlZCBjb250ZXh0IGZvciBlcnJv ciBjb250ZXh0Ci0JCSAqIG1lc3NhZ2UuCi0JCSAqLwotCQlhcHBseV9lcnJvcl9jYWxsYmFja19h cmcub3JpZ2luX25hbWUgPSBNZW1vcnlDb250ZXh0U3RyZHVwKEFwcGx5Q29udGV4dCwKLQkJCQkJ CQkJCQkJCQkJCQkgICBvcmlnaW5uYW1lKTsKKwkJc2V0X2FwcGx5X2Vycm9yX2NvbnRleHRfb3Jp Z2luKG9yaWdpbm5hbWUpOwogCX0KIAogCS8qCkBAIC0zNzk2LDEzICs0NTc0LDM2IEBAIEFwcGx5 V29ya2VyTWFpbihEYXR1bSBtYWluX2FyZykKIAogCXNlcnZlcl92ZXJzaW9uID0gd2FscmN2X3Nl cnZlcl92ZXJzaW9uKExvZ1JlcFdvcmtlcldhbFJjdkNvbm4pOwogCW9wdGlvbnMucHJvdG8ubG9n aWNhbC5wcm90b192ZXJzaW9uID0KKwkJc2VydmVyX3ZlcnNpb24gPj0gMTYwMDAwID8gTE9HSUNB TFJFUF9QUk9UT19TVFJFQU1fUEFSQUxMRUxfVkVSU0lPTl9OVU0gOgogCQlzZXJ2ZXJfdmVyc2lv biA+PSAxNTAwMDAgPyBMT0dJQ0FMUkVQX1BST1RPX1RXT1BIQVNFX1ZFUlNJT05fTlVNIDoKIAkJ c2VydmVyX3ZlcnNpb24gPj0gMTQwMDAwID8gTE9HSUNBTFJFUF9QUk9UT19TVFJFQU1fVkVSU0lP Tl9OVU0gOgogCQlMT0dJQ0FMUkVQX1BST1RPX1ZFUlNJT05fTlVNOwogCiAJb3B0aW9ucy5wcm90 by5sb2dpY2FsLnB1YmxpY2F0aW9uX25hbWVzID0gTXlTdWJzY3JpcHRpb24tPnB1YmxpY2F0aW9u czsKIAlvcHRpb25zLnByb3RvLmxvZ2ljYWwuYmluYXJ5ID0gTXlTdWJzY3JpcHRpb24tPmJpbmFy eTsKLQlvcHRpb25zLnByb3RvLmxvZ2ljYWwuc3RyZWFtaW5nID0gTXlTdWJzY3JpcHRpb24tPnN0 cmVhbTsKKworCS8qCisJICogQXNzaWduIHRoZSBhcHByb3ByaWF0ZSBvcHRpb24gdmFsdWUgZm9y IHN0cmVhbWluZyBvcHRpb24gYWNjb3JkaW5nIHRvCisJICogdGhlICdzdHJlYW1pbmcnIG1vZGUg YW5kIHRoZSBwdWJsaXNoZXIncyBhYmlsaXR5IHRvIHN1cHBvcnQgdGhhdCBtb2RlLgorCSAqLwor CWlmIChzZXJ2ZXJfdmVyc2lvbiA+PSAxNjAwMDAgJiYKKwkJTXlTdWJzY3JpcHRpb24tPnN0cmVh bSA9PSBMT0dJQ0FMUkVQX1NUUkVBTV9QQVJBTExFTCkKKwl7CisJCW9wdGlvbnMucHJvdG8ubG9n aWNhbC5zdHJlYW1pbmdfc3RyID0gInBhcmFsbGVsIjsKKwkJTXlMb2dpY2FsUmVwV29ya2VyLT5w YXJhbGxlbF9hcHBseSA9IHRydWU7CisJfQorCWVsc2UgaWYgKHNlcnZlcl92ZXJzaW9uID49IDE0 MDAwMCAmJgorCQkJIE15U3Vic2NyaXB0aW9uLT5zdHJlYW0gIT0gTE9HSUNBTFJFUF9TVFJFQU1f T0ZGKQorCXsKKwkJb3B0aW9ucy5wcm90by5sb2dpY2FsLnN0cmVhbWluZ19zdHIgPSAib24iOwor CQlNeUxvZ2ljYWxSZXBXb3JrZXItPnBhcmFsbGVsX2FwcGx5ID0gZmFsc2U7CisJfQorCWVsc2UK Kwl7CisJCW9wdGlvbnMucHJvdG8ubG9naWNhbC5zdHJlYW1pbmdfc3RyID0gTlVMTDsKKwkJTXlM b2dpY2FsUmVwV29ya2VyLT5wYXJhbGxlbF9hcHBseSA9IGZhbHNlOworCX0KKwogCW9wdGlvbnMu cHJvdG8ubG9naWNhbC50d29waGFzZSA9IGZhbHNlOwogCW9wdGlvbnMucHJvdG8ubG9naWNhbC5v cmlnaW4gPSBwc3RyZHVwKE15U3Vic2NyaXB0aW9uLT5vcmlnaW4pOwogCkBAIC0zODk5LDYgKzQ3 MDAsMTUgQEAgSXNMb2dpY2FsV29ya2VyKHZvaWQpCiAJcmV0dXJuIE15TG9naWNhbFJlcFdvcmtl ciAhPSBOVUxMOwogfQogCisvKgorICogSXMgY3VycmVudCBwcm9jZXNzIGEgbG9naWNhbCByZXBs aWNhdGlvbiBwYXJhbGxlbCBhcHBseSB3b3JrZXI/CisgKi8KK2Jvb2wKK0lzTG9naWNhbFBhcmFs bGVsQXBwbHlXb3JrZXIodm9pZCkKK3sKKwlyZXR1cm4gSXNMb2dpY2FsV29ya2VyKCkgJiYgYW1f cGFyYWxsZWxfYXBwbHlfd29ya2VyKCk7Cit9CisKIC8qCiAgKiBTdGFydCBza2lwcGluZyBjaGFu Z2VzIG9mIHRoZSB0cmFuc2FjdGlvbiBpZiB0aGUgZ2l2ZW4gTFNOIG1hdGNoZXMgdGhlCiAgKiBM U04gc3BlY2lmaWVkIGJ5IHN1YnNjcmlwdGlvbidzIHNraXBsc24uCkBAIC0zOTYxLDcgKzQ3NzEs NyBAQCBjbGVhcl9zdWJzY3JpcHRpb25fc2tpcF9sc24oWExvZ1JlY1B0ciBmaW5pc2hfbHNuKQog CVhMb2dSZWNQdHIJbXlza2lwbHNuID0gTXlTdWJzY3JpcHRpb24tPnNraXBsc247CiAJYm9vbAkJ c3RhcnRlZF90eCA9IGZhbHNlOwogCi0JaWYgKGxpa2VseShYTG9nUmVjUHRySXNJbnZhbGlkKG15 c2tpcGxzbikpKQorCWlmIChsaWtlbHkoWExvZ1JlY1B0cklzSW52YWxpZChteXNraXBsc24pKSB8 fCBhbV9wYXJhbGxlbF9hcHBseV93b3JrZXIoKSkKIAkJcmV0dXJuOwogCiAJaWYgKCFJc1RyYW5z YWN0aW9uU3RhdGUoKSkKQEAgLTQwMzMsNyArNDg0Myw3IEBAIGNsZWFyX3N1YnNjcmlwdGlvbl9z a2lwX2xzbihYTG9nUmVjUHRyIGZpbmlzaF9sc24pCiB9CiAKIC8qIEVycm9yIGNhbGxiYWNrIHRv IGdpdmUgbW9yZSBjb250ZXh0IGluZm8gYWJvdXQgdGhlIGNoYW5nZSBiZWluZyBhcHBsaWVkICov Ci1zdGF0aWMgdm9pZAordm9pZAogYXBwbHlfZXJyb3JfY2FsbGJhY2sodm9pZCAqYXJnKQogewog CUFwcGx5RXJyb3JDYWxsYmFja0FyZyAqZXJyYXJnID0gJmFwcGx5X2Vycm9yX2NhbGxiYWNrX2Fy ZzsKQEAgLTQwNjEsMjMgKzQ4NzEsNDcgQEAgYXBwbHlfZXJyb3JfY2FsbGJhY2sodm9pZCAqYXJn KQogCQkJCQkgICBlcnJhcmctPnJlbW90ZV94aWQsCiAJCQkJCSAgIExTTl9GT1JNQVRfQVJHUyhl cnJhcmctPmZpbmlzaF9sc24pKTsKIAl9Ci0JZWxzZSBpZiAoZXJyYXJnLT5yZW1vdGVfYXR0bnVt IDwgMCkKLQkJZXJyY29udGV4dCgicHJvY2Vzc2luZyByZW1vdGUgZGF0YSBmb3IgcmVwbGljYXRp b24gb3JpZ2luIFwiJXNcIiBkdXJpbmcgbWVzc2FnZSB0eXBlIFwiJXNcIiBmb3IgcmVwbGljYXRp b24gdGFyZ2V0IHJlbGF0aW9uIFwiJXMuJXNcIiBpbiB0cmFuc2FjdGlvbiAldSwgZmluaXNoZWQg YXQgJVgvJVgiLAotCQkJCSAgIGVycmFyZy0+b3JpZ2luX25hbWUsCi0JCQkJICAgbG9naWNhbHJl cF9tZXNzYWdlX3R5cGUoZXJyYXJnLT5jb21tYW5kKSwKLQkJCQkgICBlcnJhcmctPnJlbC0+cmVt b3RlcmVsLm5zcG5hbWUsCi0JCQkJICAgZXJyYXJnLT5yZWwtPnJlbW90ZXJlbC5yZWxuYW1lLAot CQkJCSAgIGVycmFyZy0+cmVtb3RlX3hpZCwKLQkJCQkgICBMU05fRk9STUFUX0FSR1MoZXJyYXJn LT5maW5pc2hfbHNuKSk7CiAJZWxzZQotCQllcnJjb250ZXh0KCJwcm9jZXNzaW5nIHJlbW90ZSBk YXRhIGZvciByZXBsaWNhdGlvbiBvcmlnaW4gXCIlc1wiIGR1cmluZyBtZXNzYWdlIHR5cGUgXCIl c1wiIGZvciByZXBsaWNhdGlvbiB0YXJnZXQgcmVsYXRpb24gXCIlcy4lc1wiIGNvbHVtbiBcIiVz XCIgaW4gdHJhbnNhY3Rpb24gJXUsIGZpbmlzaGVkIGF0ICVYLyVYIiwKLQkJCQkgICBlcnJhcmct Pm9yaWdpbl9uYW1lLAotCQkJCSAgIGxvZ2ljYWxyZXBfbWVzc2FnZV90eXBlKGVycmFyZy0+Y29t bWFuZCksCi0JCQkJICAgZXJyYXJnLT5yZWwtPnJlbW90ZXJlbC5uc3BuYW1lLAotCQkJCSAgIGVy cmFyZy0+cmVsLT5yZW1vdGVyZWwucmVsbmFtZSwKLQkJCQkgICBlcnJhcmctPnJlbC0+cmVtb3Rl cmVsLmF0dG5hbWVzW2VycmFyZy0+cmVtb3RlX2F0dG51bV0sCi0JCQkJICAgZXJyYXJnLT5yZW1v dGVfeGlkLAotCQkJCSAgIExTTl9GT1JNQVRfQVJHUyhlcnJhcmctPmZpbmlzaF9sc24pKTsKKwl7 CisJCWlmIChlcnJhcmctPnJlbW90ZV9hdHRudW0gPCAwKQorCQl7CisJCQlpZiAoWExvZ1JlY1B0 cklzSW52YWxpZChlcnJhcmctPmZpbmlzaF9sc24pKQorCQkJCWVycmNvbnRleHQoInByb2Nlc3Np bmcgcmVtb3RlIGRhdGEgZm9yIHJlcGxpY2F0aW9uIG9yaWdpbiBcIiVzXCIgZHVyaW5nIG1lc3Nh Z2UgdHlwZSBcIiVzXCIgZm9yIHJlcGxpY2F0aW9uIHRhcmdldCByZWxhdGlvbiBcIiVzLiVzXCIg aW4gdHJhbnNhY3Rpb24gJXUiLAorCQkJCQkJICAgZXJyYXJnLT5vcmlnaW5fbmFtZSwKKwkJCQkJ CSAgIGxvZ2ljYWxyZXBfbWVzc2FnZV90eXBlKGVycmFyZy0+Y29tbWFuZCksCisJCQkJCQkgICBl cnJhcmctPnJlbC0+cmVtb3RlcmVsLm5zcG5hbWUsCisJCQkJCQkgICBlcnJhcmctPnJlbC0+cmVt b3RlcmVsLnJlbG5hbWUsCisJCQkJCQkgICBlcnJhcmctPnJlbW90ZV94aWQpOworCQkJZWxzZQor CQkJCWVycmNvbnRleHQoInByb2Nlc3NpbmcgcmVtb3RlIGRhdGEgZm9yIHJlcGxpY2F0aW9uIG9y aWdpbiBcIiVzXCIgZHVyaW5nIG1lc3NhZ2UgdHlwZSBcIiVzXCIgZm9yIHJlcGxpY2F0aW9uIHRh cmdldCByZWxhdGlvbiBcIiVzLiVzXCIgaW4gdHJhbnNhY3Rpb24gJXUsIGZpbmlzaGVkIGF0ICVY LyVYIiwKKwkJCQkJCSAgIGVycmFyZy0+b3JpZ2luX25hbWUsCisJCQkJCQkgICBsb2dpY2FscmVw X21lc3NhZ2VfdHlwZShlcnJhcmctPmNvbW1hbmQpLAorCQkJCQkJICAgZXJyYXJnLT5yZWwtPnJl bW90ZXJlbC5uc3BuYW1lLAorCQkJCQkJICAgZXJyYXJnLT5yZWwtPnJlbW90ZXJlbC5yZWxuYW1l LAorCQkJCQkJICAgZXJyYXJnLT5yZW1vdGVfeGlkLAorCQkJCQkJICAgTFNOX0ZPUk1BVF9BUkdT KGVycmFyZy0+ZmluaXNoX2xzbikpOworCQl9CisJCWVsc2UKKwkJeworCQkJaWYgKFhMb2dSZWNQ dHJJc0ludmFsaWQoZXJyYXJnLT5maW5pc2hfbHNuKSkKKwkJCQllcnJjb250ZXh0KCJwcm9jZXNz aW5nIHJlbW90ZSBkYXRhIGZvciByZXBsaWNhdGlvbiBvcmlnaW4gXCIlc1wiIGR1cmluZyBtZXNz YWdlIHR5cGUgXCIlc1wiIGZvciByZXBsaWNhdGlvbiB0YXJnZXQgcmVsYXRpb24gXCIlcy4lc1wi IGNvbHVtbiBcIiVzXCIgaW4gdHJhbnNhY3Rpb24gJXUiLAorCQkJCQkJICAgZXJyYXJnLT5vcmln aW5fbmFtZSwKKwkJCQkJCSAgIGxvZ2ljYWxyZXBfbWVzc2FnZV90eXBlKGVycmFyZy0+Y29tbWFu ZCksCisJCQkJCQkgICBlcnJhcmctPnJlbC0+cmVtb3RlcmVsLm5zcG5hbWUsCisJCQkJCQkgICBl cnJhcmctPnJlbC0+cmVtb3RlcmVsLnJlbG5hbWUsCisJCQkJCQkgICBlcnJhcmctPnJlbC0+cmVt b3RlcmVsLmF0dG5hbWVzW2VycmFyZy0+cmVtb3RlX2F0dG51bV0sCisJCQkJCQkgICBlcnJhcmct PnJlbW90ZV94aWQpOworCQkJZWxzZQorCQkJCWVycmNvbnRleHQoInByb2Nlc3NpbmcgcmVtb3Rl IGRhdGEgZm9yIHJlcGxpY2F0aW9uIG9yaWdpbiBcIiVzXCIgZHVyaW5nIG1lc3NhZ2UgdHlwZSBc IiVzXCIgZm9yIHJlcGxpY2F0aW9uIHRhcmdldCByZWxhdGlvbiBcIiVzLiVzXCIgY29sdW1uIFwi JXNcIiBpbiB0cmFuc2FjdGlvbiAldSwgZmluaXNoZWQgYXQgJVgvJVgiLAorCQkJCQkJICAgZXJy YXJnLT5vcmlnaW5fbmFtZSwKKwkJCQkJCSAgIGxvZ2ljYWxyZXBfbWVzc2FnZV90eXBlKGVycmFy Zy0+Y29tbWFuZCksCisJCQkJCQkgICBlcnJhcmctPnJlbC0+cmVtb3RlcmVsLm5zcG5hbWUsCisJ CQkJCQkgICBlcnJhcmctPnJlbC0+cmVtb3RlcmVsLnJlbG5hbWUsCisJCQkJCQkgICBlcnJhcmct PnJlbC0+cmVtb3RlcmVsLmF0dG5hbWVzW2VycmFyZy0+cmVtb3RlX2F0dG51bV0sCisJCQkJCQkg ICBlcnJhcmctPnJlbW90ZV94aWQsCisJCQkJCQkgICBMU05fRk9STUFUX0FSR1MoZXJyYXJnLT5m aW5pc2hfbHNuKSk7CisJCX0KKwl9CiB9CiAKIC8qIFNldCB0cmFuc2FjdGlvbiBpbmZvcm1hdGlv biBvZiBhcHBseSBlcnJvciBjYWxsYmFjayAqLwpAQCAtNDA5NywzICs0OTMxLDUzIEBAIHJlc2V0 X2FwcGx5X2Vycm9yX2NvbnRleHRfaW5mbyh2b2lkKQogCWFwcGx5X2Vycm9yX2NhbGxiYWNrX2Fy Zy5yZW1vdGVfYXR0bnVtID0gLTE7CiAJc2V0X2FwcGx5X2Vycm9yX2NvbnRleHRfeGFjdChJbnZh bGlkVHJhbnNhY3Rpb25JZCwgSW52YWxpZFhMb2dSZWNQdHIpOwogfQorCisvKgorICogQWxsb2Nh dGUgdGhlIG9yaWdpbiBuYW1lIGluIGxvbmctbGl2ZWQgY29udGV4dCBmb3IgZXJyb3IgY29udGV4 dCBtZXNzYWdlLgorICovCit2b2lkCitzZXRfYXBwbHlfZXJyb3JfY29udGV4dF9vcmlnaW4oY2hh ciAqb3JpZ2lubmFtZSkKK3sKKwlhcHBseV9lcnJvcl9jYWxsYmFja19hcmcub3JpZ2luX25hbWUg PSBNZW1vcnlDb250ZXh0U3RyZHVwKEFwcGx5Q29udGV4dCwKKwkJCQkJCQkJCQkJCQkJCSAgIG9y aWdpbm5hbWUpOworfQorCisvKgorICogUmV0dXJuIHRoZSBhY3Rpb24gdG8gYmUgdGFrZW4gZm9y IHRoZSBnaXZlbiB0cmFuc2FjdGlvbi4gKndpbmZvIGlzCisgKiBhc3NpZ25lZCB0byB0aGUgZGVz dGluYXRpb24gcGFyYWxsZWwgd29ya2VyIGluZm8gd2hlbiB0aGUgbGVhZGVyIGFwcGx5CisgKiB3 b3JrZXIgaGFzIHRvIHBhc3MgYWxsIHRoZSB0cmFuc2FjdGlvbidzIGNoYW5nZXMgdG8gdGhlIHBh cmFsbGVsIGFwcGx5CisgKiB3b3JrZXIuCisgKi8KK3N0YXRpYyBUcmFuc0FwcGx5QWN0aW9uCitn ZXRfdHJhbnNhY3Rpb25fYXBwbHlfYWN0aW9uKFRyYW5zYWN0aW9uSWQgeGlkLCBQYXJhbGxlbEFw cGx5V29ya2VySW5mbyAqKndpbmZvKQoreworCSp3aW5mbyA9IE5VTEw7CisKKwlpZiAoYW1fcGFy YWxsZWxfYXBwbHlfd29ya2VyKCkpCisJeworCQlyZXR1cm4gVFJBTlNfUEFSQUxMRUxfQVBQTFk7 CisJfQorCWVsc2UgaWYgKGluX3JlbW90ZV90cmFuc2FjdGlvbikKKwl7CisJCXJldHVybiBUUkFO U19MRUFERVJfQVBQTFk7CisJfQorCisJLyoKKwkgKiBDaGVjayBpZiB3ZSBhcmUgcHJvY2Vzc2lu ZyB0aGlzIHRyYW5zYWN0aW9uIHVzaW5nIGEgcGFyYWxsZWwgYXBwbHkKKwkgKiB3b3JrZXIuCisJ ICovCisJKndpbmZvID0gcGFfZmluZF93b3JrZXIoeGlkKTsKKworCWlmICghKndpbmZvKQorCXsK KwkJcmV0dXJuIFRSQU5TX0xFQURFUl9TRVJJQUxJWkU7CisJfQorCWVsc2UgaWYgKCgqd2luZm8p LT5zZXJpYWxpemVfY2hhbmdlcykKKwl7CisJCXJldHVybiBUUkFOU19MRUFERVJfUEFSVElBTF9T RVJJQUxJWkU7CisJfQorCWVsc2UKKwl7CisJCXJldHVybiBUUkFOU19MRUFERVJfU0VORF9UT19Q QVJBTExFTDsKKwl9Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9wZ291 dHB1dC9wZ291dHB1dC5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcGdvdXRwdXQvcGdvdXRw dXQuYwppbmRleCA3NzM3MjQyNTE2Li5lNTM3ZmM5MWUxIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9yZXBsaWNhdGlvbi9wZ291dHB1dC9wZ291dHB1dC5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxp Y2F0aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0LmMKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlICJj YXRhbG9nL3BnX3B1YmxpY2F0aW9uX3JlbC5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfc3Vic2Ny aXB0aW9uLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvZGVmcmVtLmgiCisjaW5jbHVkZSAiY29tbWFu ZHMvc3Vic2NyaXB0aW9uY21kcy5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWN1dG9yLmgiCiAj aW5jbHVkZSAiZm1nci5oIgogI2luY2x1ZGUgIm5vZGVzL21ha2VmdW5jcy5oIgpAQCAtMjkwLDcg KzI5MSw3IEBAIHBhcnNlX291dHB1dF9wYXJhbWV0ZXJzKExpc3QgKm9wdGlvbnMsIFBHT3V0cHV0 RGF0YSAqZGF0YSkKIAlib29sCQlvcmlnaW5fb3B0aW9uX2dpdmVuID0gZmFsc2U7CiAKIAlkYXRh LT5iaW5hcnkgPSBmYWxzZTsKLQlkYXRhLT5zdHJlYW1pbmcgPSBmYWxzZTsKKwlkYXRhLT5zdHJl YW1pbmcgPSBMT0dJQ0FMUkVQX1NUUkVBTV9PRkY7CiAJZGF0YS0+bWVzc2FnZXMgPSBmYWxzZTsK IAlkYXRhLT50d29fcGhhc2UgPSBmYWxzZTsKIApAQCAtMzY5LDcgKzM3MCw3IEBAIHBhcnNlX291 dHB1dF9wYXJhbWV0ZXJzKExpc3QgKm9wdGlvbnMsIFBHT3V0cHV0RGF0YSAqZGF0YSkKIAkJCQkJ CSBlcnJtc2coImNvbmZsaWN0aW5nIG9yIHJlZHVuZGFudCBvcHRpb25zIikpKTsKIAkJCXN0cmVh bWluZ19naXZlbiA9IHRydWU7CiAKLQkJCWRhdGEtPnN0cmVhbWluZyA9IGRlZkdldEJvb2xlYW4o ZGVmZWwpOworCQkJZGF0YS0+c3RyZWFtaW5nID0gZGVmR2V0U3RyZWFtaW5nTW9kZShkZWZlbCk7 CiAJCX0KIAkJZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAidHdvX3BoYXNlIikgPT0g MCkKIAkJewpAQCAtNDYxLDEzICs0NjIsMjAgQEAgcGdvdXRwdXRfc3RhcnR1cChMb2dpY2FsRGVj b2RpbmdDb250ZXh0ICpjdHgsIE91dHB1dFBsdWdpbk9wdGlvbnMgKm9wdCwKIAkJICogd2Ugb25s eSBhbGxvdyBpdCB3aXRoIHN1ZmZpY2llbnQgdmVyc2lvbiBvZiB0aGUgcHJvdG9jb2wsIGFuZCB3 aGVuCiAJCSAqIHRoZSBvdXRwdXQgcGx1Z2luIHN1cHBvcnRzIGl0LgogCQkgKi8KLQkJaWYgKCFk YXRhLT5zdHJlYW1pbmcpCisJCWlmIChkYXRhLT5zdHJlYW1pbmcgPT0gTE9HSUNBTFJFUF9TVFJF QU1fT0ZGKQogCQkJY3R4LT5zdHJlYW1pbmcgPSBmYWxzZTsKLQkJZWxzZSBpZiAoZGF0YS0+cHJv dG9jb2xfdmVyc2lvbiA8IExPR0lDQUxSRVBfUFJPVE9fU1RSRUFNX1ZFUlNJT05fTlVNKQorCQll bHNlIGlmIChkYXRhLT5zdHJlYW1pbmcgPT0gTE9HSUNBTFJFUF9TVFJFQU1fT04gJiYKKwkJCQkg ZGF0YS0+cHJvdG9jb2xfdmVyc2lvbiA8IExPR0lDQUxSRVBfUFJPVE9fU1RSRUFNX1ZFUlNJT05f TlVNKQogCQkJZXJlcG9ydChFUlJPUiwKIAkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BB UkFNRVRFUl9WQUxVRSksCiAJCQkJCSBlcnJtc2coInJlcXVlc3RlZCBwcm90b192ZXJzaW9uPSVk IGRvZXMgbm90IHN1cHBvcnQgc3RyZWFtaW5nLCBuZWVkICVkIG9yIGhpZ2hlciIsCiAJCQkJCQkJ ZGF0YS0+cHJvdG9jb2xfdmVyc2lvbiwgTE9HSUNBTFJFUF9QUk9UT19TVFJFQU1fVkVSU0lPTl9O VU0pKSk7CisJCWVsc2UgaWYgKGRhdGEtPnN0cmVhbWluZyA9PSBMT0dJQ0FMUkVQX1NUUkVBTV9Q QVJBTExFTCAmJgorCQkJCSBkYXRhLT5wcm90b2NvbF92ZXJzaW9uIDwgTE9HSUNBTFJFUF9QUk9U T19TVFJFQU1fUEFSQUxMRUxfVkVSU0lPTl9OVU0pCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQko ZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJIGVycm1zZygi cmVxdWVzdGVkIHByb3RvX3ZlcnNpb249JWQgZG9lcyBub3Qgc3VwcG9ydCBwYXJhbGxlbCBzdHJl YW1pbmcsIG5lZWQgJWQgb3IgaGlnaGVyIiwKKwkJCQkJCQlkYXRhLT5wcm90b2NvbF92ZXJzaW9u LCBMT0dJQ0FMUkVQX1BST1RPX1NUUkVBTV9QQVJBTExFTF9WRVJTSU9OX05VTSkpKTsKIAkJZWxz ZSBpZiAoIWN0eC0+c3RyZWFtaW5nKQogCQkJZXJlcG9ydChFUlJPUiwKIAkJCQkJKGVycmNvZGUo RVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCkBAIC0xODQxLDYgKzE4NDksOCBAQCBw Z291dHB1dF9zdHJlYW1fYWJvcnQoc3RydWN0IExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwK IAkJCQkJICBYTG9nUmVjUHRyIGFib3J0X2xzbikKIHsKIAlSZW9yZGVyQnVmZmVyVFhOICp0b3B0 eG47CisJUEdPdXRwdXREYXRhICpkYXRhID0gKFBHT3V0cHV0RGF0YSAqKSBjdHgtPm91dHB1dF9w bHVnaW5fcHJpdmF0ZTsKKwlib29sCQl3cml0ZV9hYm9ydF9pbmZvID0gKGRhdGEtPnN0cmVhbWlu ZyA9PSBMT0dJQ0FMUkVQX1NUUkVBTV9QQVJBTExFTCk7CiAKIAkvKgogCSAqIFRoZSBhYm9ydCBz aG91bGQgaGFwcGVuIG91dHNpZGUgc3RyZWFtaW5nIGJsb2NrLCBldmVuIGZvciBzdHJlYW1lZApA QCAtMTg1NCw3ICsxODY0LDkgQEAgcGdvdXRwdXRfc3RyZWFtX2Fib3J0KHN0cnVjdCBMb2dpY2Fs RGVjb2RpbmdDb250ZXh0ICpjdHgsCiAJQXNzZXJ0KHJidHhuX2lzX3N0cmVhbWVkKHRvcHR4bikp OwogCiAJT3V0cHV0UGx1Z2luUHJlcGFyZVdyaXRlKGN0eCwgdHJ1ZSk7Ci0JbG9naWNhbHJlcF93 cml0ZV9zdHJlYW1fYWJvcnQoY3R4LT5vdXQsIHRvcHR4bi0+eGlkLCB0eG4tPnhpZCk7CisJbG9n aWNhbHJlcF93cml0ZV9zdHJlYW1fYWJvcnQoY3R4LT5vdXQsIHRvcHR4bi0+eGlkLCB0eG4tPnhp ZCwgYWJvcnRfbHNuLAorCQkJCQkJCQkgIHR4bi0+eGFjdF90aW1lLmFib3J0X3RpbWUsIHdyaXRl X2Fib3J0X2luZm8pOworCiAJT3V0cHV0UGx1Z2luV3JpdGUoY3R4LCB0cnVlKTsKIAogCWNsZWFu dXBfcmVsX3N5bmNfY2FjaGUodG9wdHhuLT54aWQsIGZhbHNlKTsKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NzaWduYWwuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBj L3Byb2NzaWduYWwuYwppbmRleCA0M2ZiYmRiYzg2Li4zOTViMmNmNjkwIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jc2lnbmFsLmMKKysrIGIvc3JjL2JhY2tlbmQvc3Rv cmFnZS9pcGMvcHJvY3NpZ25hbC5jCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSAiY29tbWFu ZHMvYXN5bmMuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIK KyNpbmNsdWRlICJyZXBsaWNhdGlvbi9sb2dpY2Fsd29ya2VyLmgiCiAjaW5jbHVkZSAicmVwbGlj YXRpb24vd2Fsc2VuZGVyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9jb25kaXRpb25fdmFyaWFibGUu aCIKICNpbmNsdWRlICJzdG9yYWdlL2lwYy5oIgpAQCAtNjU3LDYgKzY1OCw5IEBAIHByb2NzaWdu YWxfc2lndXNyMV9oYW5kbGVyKFNJR05BTF9BUkdTKQogCWlmIChDaGVja1Byb2NTaWduYWwoUFJP Q1NJR19MT0dfTUVNT1JZX0NPTlRFWFQpKQogCQlIYW5kbGVMb2dNZW1vcnlDb250ZXh0SW50ZXJy dXB0KCk7CiAKKwlpZiAoQ2hlY2tQcm9jU2lnbmFsKFBST0NTSUdfUEFSQUxMRUxfQVBQTFlfTUVT U0FHRSkpCisJCUhhbmRsZVBhcmFsbGVsQXBwbHlNZXNzYWdlSW50ZXJydXB0KCk7CisKIAlpZiAo Q2hlY2tQcm9jU2lnbmFsKFBST0NTSUdfUkVDT1ZFUllfQ09ORkxJQ1RfREFUQUJBU0UpKQogCQlS ZWNvdmVyeUNvbmZsaWN0SW50ZXJydXB0KFBST0NTSUdfUkVDT1ZFUllfQ09ORkxJQ1RfREFUQUJB U0UpOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvbG1nci5jIGIvc3Jj L2JhY2tlbmQvc3RvcmFnZS9sbWdyL2xtZ3IuYwppbmRleCAyMGRjY2EzOGQ5Li5lZTliODlhNjcy IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvbG1nci5jCisrKyBiL3NyYy9i YWNrZW5kL3N0b3JhZ2UvbG1nci9sbWdyLmMKQEAgLTExMTcsNiArMTExNyw0NSBAQCBVbmxvY2tT aGFyZWRPYmplY3RGb3JTZXNzaW9uKE9pZCBjbGFzc2lkLCBPaWQgb2JqaWQsIHVpbnQxNiBvYmpz dWJpZCwKIAlMb2NrUmVsZWFzZSgmdGFnLCBsb2NrbW9kZSwgdHJ1ZSk7CiB9CiAKKy8qCisgKgkJ TG9ja0FwcGx5VHJhbnNhY3Rpb25Gb3JTZXNzaW9uCisgKgorICogT2J0YWluIGEgc2Vzc2lvbi1s ZXZlbCBsb2NrIG9uIGEgdHJhbnNhY3Rpb24gYmVpbmcgYXBwbGllZCBvbiBhIGxvZ2ljYWwKKyAq IHJlcGxpY2F0aW9uIHN1YnNjcmliZXIuIFNlZSBMb2NrUmVsYXRpb25JZEZvclNlc3Npb24gZm9y IG5vdGVzIGFib3V0CisgKiBzZXNzaW9uLWxldmVsIGxvY2tzLgorICovCit2b2lkCitMb2NrQXBw bHlUcmFuc2FjdGlvbkZvclNlc3Npb24oT2lkIHN1Ym9pZCwgVHJhbnNhY3Rpb25JZCB4aWQsIHVp bnQxNiBvYmppZCwKKwkJCQkJCQkgICBMT0NLTU9ERSBsb2NrbW9kZSkKK3sKKwlMT0NLVEFHCQl0 YWc7CisKKwlTRVRfTE9DS1RBR19BUFBMWV9UUkFOU0FDVElPTih0YWcsCisJCQkJCQkJCSAgTXlE YXRhYmFzZUlkLAorCQkJCQkJCQkgIHN1Ym9pZCwKKwkJCQkJCQkJICB4aWQsCisJCQkJCQkJCSAg b2JqaWQpOworCisJKHZvaWQpIExvY2tBY3F1aXJlKCZ0YWcsIGxvY2ttb2RlLCB0cnVlLCBmYWxz ZSk7Cit9CisKKy8qCisgKgkJVW5sb2NrQXBwbHlUcmFuc2FjdGlvbkZvclNlc3Npb24KKyAqLwor dm9pZAorVW5sb2NrQXBwbHlUcmFuc2FjdGlvbkZvclNlc3Npb24oT2lkIHN1Ym9pZCwgVHJhbnNh Y3Rpb25JZCB4aWQsIHVpbnQxNiBvYmppZCwKKwkJCQkJCQkJIExPQ0tNT0RFIGxvY2ttb2RlKQor eworCUxPQ0tUQUcJCXRhZzsKKworCVNFVF9MT0NLVEFHX0FQUExZX1RSQU5TQUNUSU9OKHRhZywK KwkJCQkJCQkJICBNeURhdGFiYXNlSWQsCisJCQkJCQkJCSAgc3Vib2lkLAorCQkJCQkJCQkgIHhp ZCwKKwkJCQkJCQkJICBvYmppZCk7CisKKwlMb2NrUmVsZWFzZSgmdGFnLCBsb2NrbW9kZSwgdHJ1 ZSk7Cit9CiAKIC8qCiAgKiBBcHBlbmQgYSBkZXNjcmlwdGlvbiBvZiBhIGxvY2thYmxlIG9iamVj dCB0byBidWYuCkBAIC0xMjAyLDYgKzEyNDEsMTMgQEAgRGVzY3JpYmVMb2NrVGFnKFN0cmluZ0lu Zm8gYnVmLCBjb25zdCBMT0NLVEFHICp0YWcpCiAJCQkJCQkJIHRhZy0+bG9ja3RhZ19maWVsZDMs CiAJCQkJCQkJIHRhZy0+bG9ja3RhZ19maWVsZDQpOwogCQkJYnJlYWs7CisJCWNhc2UgTE9DS1RB R19BUFBMWV9UUkFOU0FDVElPTjoKKwkJCWFwcGVuZFN0cmluZ0luZm8oYnVmLAorCQkJCQkJCSBf KCJyZW1vdGUgdHJhbnNhY3Rpb24gJXUgb2Ygc3Vic2NyaXB0aW9uICV1IG9mIGRhdGFiYXNlICV1 IiksCisJCQkJCQkJIHRhZy0+bG9ja3RhZ19maWVsZDMsCisJCQkJCQkJIHRhZy0+bG9ja3RhZ19m aWVsZDIsCisJCQkJCQkJIHRhZy0+bG9ja3RhZ19maWVsZDEpOworCQkJYnJlYWs7CiAJCWRlZmF1 bHQ6CiAJCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwKIAkJCQkJCQkgXygidW5yZWNvZ25pemVkIGxv Y2t0YWcgdHlwZSAlZCIpLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5j IGIvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jCmluZGV4IDMxNDc5ZTgyMTIuLjIyNGFiMjkw YWYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYworKysgYi9zcmMvYmFj a2VuZC90Y29wL3Bvc3RncmVzLmMKQEAgLTMzOTEsNiArMzM5MSw5IEBAIFByb2Nlc3NJbnRlcnJ1 cHRzKHZvaWQpCiAKIAlpZiAoTG9nTWVtb3J5Q29udGV4dFBlbmRpbmcpCiAJCVByb2Nlc3NMb2dN ZW1vcnlDb250ZXh0SW50ZXJydXB0KCk7CisKKwlpZiAoUGFyYWxsZWxBcHBseU1lc3NhZ2VQZW5k aW5nKQorCQlIYW5kbGVQYXJhbGxlbEFwcGx5TWVzc2FnZXMoKTsKIH0KIAogLyoKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZlbnQuYyBiL3NyYy9iYWNrZW5k L3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZlbnQuYwppbmRleCBmOTU3NGU4MDBmLi42ZTQ1OTkyNzhj IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50LmMKKysr IGIvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvd2FpdF9ldmVudC5jCkBAIC0yMzAsNiArMjMw LDkgQEAgcGdzdGF0X2dldF93YWl0X2FjdGl2aXR5KFdhaXRFdmVudEFjdGl2aXR5IHcpCiAJCWNh c2UgV0FJVF9FVkVOVF9MT0dJQ0FMX0xBVU5DSEVSX01BSU46CiAJCQlldmVudF9uYW1lID0gIkxv Z2ljYWxMYXVuY2hlck1haW4iOwogCQkJYnJlYWs7CisJCWNhc2UgV0FJVF9FVkVOVF9MT0dJQ0FM X1BBUkFMTEVMX0FQUExZX01BSU46CisJCQlldmVudF9uYW1lID0gIkxvZ2ljYWxQYXJhbGxlbEFw cGx5TWFpbiI7CisJCQlicmVhazsKIAkJY2FzZSBXQUlUX0VWRU5UX1JFQ09WRVJZX1dBTF9TVFJF QU06CiAJCQlldmVudF9uYW1lID0gIlJlY292ZXJ5V2FsU3RyZWFtIjsKIAkJCWJyZWFrOwpAQCAt Mzg4LDYgKzM5MSw5IEBAIHBnc3RhdF9nZXRfd2FpdF9pcGMoV2FpdEV2ZW50SVBDIHcpCiAJCWNh c2UgV0FJVF9FVkVOVF9IQVNIX0dST1dfQlVDS0VUU19SRUlOU0VSVDoKIAkJCWV2ZW50X25hbWUg PSAiSGFzaEdyb3dCdWNrZXRzUmVpbnNlcnQiOwogCQkJYnJlYWs7CisJCWNhc2UgV0FJVF9FVkVO VF9MT0dJQ0FMX1BBUkFMTEVMX0FQUExZX1NUQVRFX0NIQU5HRToKKwkJCWV2ZW50X25hbWUgPSAi TG9naWNhbFBhcmFsbGVsQXBwbHlTdGF0ZUNoYW5nZSI7CisJCQlicmVhazsKIAkJY2FzZSBXQUlU X0VWRU5UX0xPR0lDQUxfU1lOQ19EQVRBOgogCQkJZXZlbnRfbmFtZSA9ICJMb2dpY2FsU3luY0Rh dGEiOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvbG9ja2Z1 bmNzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvbG9ja2Z1bmNzLmMKaW5kZXggM2NjZTRiZGJj MS4uYzhhYWMwNjk0ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2xvY2tmdW5j cy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9sb2NrZnVuY3MuYwpAQCAtMzcsMTAgKzM3 LDExIEBAIGNvbnN0IGNoYXIgKmNvbnN0IExvY2tUYWdUeXBlTmFtZXNbXSA9IHsKIAkic3BlY3Rv a2VuIiwKIAkib2JqZWN0IiwKIAkidXNlcmxvY2siLAotCSJhZHZpc29yeSIKKwkiYWR2aXNvcnki LAorCSJhcHBseXRyYW5zYWN0aW9uIgogfTsKIAotU3RhdGljQXNzZXJ0RGVjbChsZW5ndGhvZihM b2NrVGFnVHlwZU5hbWVzKSA9PSAoTE9DS1RBR19BRFZJU09SWSArIDEpLAorU3RhdGljQXNzZXJ0 RGVjbChsZW5ndGhvZihMb2NrVGFnVHlwZU5hbWVzKSA9PSAoTE9DS1RBR19MQVNUX1RZUEUgKyAx KSwKIAkJCQkgImFycmF5IGxlbmd0aCBtaXNtYXRjaCIpOwogCiAvKiBUaGlzIG11c3QgbWF0Y2gg ZW51bSBQcmVkaWNhdGVMb2NrVGFyZ2V0VHlwZSAocHJlZGljYXRlX2ludGVybmFscy5oKSAqLwpA QCAtMzEyLDYgKzMxMywxNyBAQCBwZ19sb2NrX3N0YXR1cyhQR19GVU5DVElPTl9BUkdTKQogCQkJ CW51bGxzWzhdID0gdHJ1ZTsKIAkJCQludWxsc1s5XSA9IHRydWU7CiAJCQkJYnJlYWs7CisJCQlj YXNlIExPQ0tUQUdfQVBQTFlfVFJBTlNBQ1RJT046CisJCQkJdmFsdWVzWzFdID0gT2JqZWN0SWRH ZXREYXR1bShpbnN0YW5jZS0+bG9ja3RhZy5sb2NrdGFnX2ZpZWxkMSk7CisJCQkJdmFsdWVzWzhd ID0gT2JqZWN0SWRHZXREYXR1bShpbnN0YW5jZS0+bG9ja3RhZy5sb2NrdGFnX2ZpZWxkMik7CisJ CQkJdmFsdWVzWzZdID0gT2JqZWN0SWRHZXREYXR1bShpbnN0YW5jZS0+bG9ja3RhZy5sb2NrdGFn X2ZpZWxkMyk7CisJCQkJdmFsdWVzWzldID0gSW50MTZHZXREYXR1bShpbnN0YW5jZS0+bG9ja3Rh Zy5sb2NrdGFnX2ZpZWxkNCk7CisJCQkJbnVsbHNbMl0gPSB0cnVlOworCQkJCW51bGxzWzNdID0g dHJ1ZTsKKwkJCQludWxsc1s0XSA9IHRydWU7CisJCQkJbnVsbHNbNV0gPSB0cnVlOworCQkJCW51 bGxzWzddID0gdHJ1ZTsKKwkJCQlicmVhazsKIAkJCWNhc2UgTE9DS1RBR19PQkpFQ1Q6CiAJCQlj YXNlIExPQ0tUQUdfVVNFUkxPQ0s6CiAJCQljYXNlIExPQ0tUQUdfQURWSVNPUlk6CmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYyBiL3NyYy9iYWNrZW5kL3V0 aWxzL21pc2MvZ3VjX3RhYmxlcy5jCmluZGV4IDY4MzI4YjE0MDIuLjkyNTQ1YjQ5NTggMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5jCisrKyBiL3NyYy9iYWNr ZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5jCkBAIC0zMDAyLDYgKzMwMDIsMTggQEAgc3RydWN0 IGNvbmZpZ19pbnQgQ29uZmlndXJlTmFtZXNJbnRbXSA9CiAJCU5VTEwsIE5VTEwsIE5VTEwKIAl9 LAogCisJeworCQl7Im1heF9wYXJhbGxlbF9hcHBseV93b3JrZXJzX3Blcl9zdWJzY3JpcHRpb24i LAorCQkJUEdDX1NJR0hVUCwKKwkJCVJFUExJQ0FUSU9OX1NVQlNDUklCRVJTLAorCQkJZ2V0dGV4 dF9ub29wKCJNYXhpbXVtIG51bWJlciBvZiBwYXJhbGxlbCBhcHBseSB3b3JrZXJzIHBlciBzdWJz Y3JpcHRpb24uIiksCisJCQlOVUxMLAorCQl9LAorCQkmbWF4X3BhcmFsbGVsX2FwcGx5X3dvcmtl cnNfcGVyX3N1YnNjcmlwdGlvbiwKKwkJMiwgMCwgTUFYX1BBUkFMTEVMX1dPUktFUl9MSU1JVCwK KwkJTlVMTCwgTlVMTCwgTlVMTAorCX0sCisKIAl7CiAJCXsibG9nX3JvdGF0aW9uX2FnZSIsIFBH Q19TSUdIVVAsIExPR0dJTkdfV0hFUkUsCiAJCQlnZXR0ZXh0X25vb3AoIlNldHMgdGhlIGFtb3Vu dCBvZiB0aW1lIHRvIHdhaXQgYmVmb3JlIGZvcmNpbmcgIgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlIGIvc3JjL2JhY2tlbmQvdXRpbHMv bWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCmluZGV4IDVhZmRlYjA0ZGUuLmMyYWRhOTIwNTQg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBs ZQorKysgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUKQEAg LTM1OSw2ICszNTksNyBAQAogI21heF9sb2dpY2FsX3JlcGxpY2F0aW9uX3dvcmtlcnMgPSA0CSMg dGFrZW4gZnJvbSBtYXhfd29ya2VyX3Byb2Nlc3NlcwogCQkJCQkjIChjaGFuZ2UgcmVxdWlyZXMg cmVzdGFydCkKICNtYXhfc3luY193b3JrZXJzX3Blcl9zdWJzY3JpcHRpb24gPSAyCSMgdGFrZW4g ZnJvbSBtYXhfbG9naWNhbF9yZXBsaWNhdGlvbl93b3JrZXJzCisjbWF4X3BhcmFsbGVsX2FwcGx5 X3dvcmtlcnNfcGVyX3N1YnNjcmlwdGlvbiA9IDIJIyB0YWtlbiBmcm9tIG1heF9sb2dpY2FsX3Jl cGxpY2F0aW9uX3dvcmtlcnMKIAogCiAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQg YS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYwpp bmRleCAzMDcxOGRkNzU4Li41ZTgwMGRjNzlhIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAv cGdfZHVtcC5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKQEAgLTQ1MzMsNyArNDUz Myw3IEBAIGdldFN1YnNjcmlwdGlvbnMoQXJjaGl2ZSAqZm91dCkKIAlpZiAoZm91dC0+cmVtb3Rl VmVyc2lvbiA+PSAxNDAwMDApCiAJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5LCAiIHMuc3Vi c3RyZWFtLFxuIik7CiAJZWxzZQotCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwgIiBmYWxz ZSBBUyBzdWJzdHJlYW0sXG4iKTsKKwkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksICIgJ2Yn IEFTIHN1YnN0cmVhbSxcbiIpOwogCiAJaWYgKGZvdXQtPnJlbW90ZVZlcnNpb24gPj0gMTUwMDAw KQogCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwKQEAgLTQ2NzAsOCArNDY3MCwxMCBAQCBk dW1wU3Vic2NyaXB0aW9uKEFyY2hpdmUgKmZvdXQsIGNvbnN0IFN1YnNjcmlwdGlvbkluZm8gKnN1 YmluZm8pCiAJaWYgKHN0cmNtcChzdWJpbmZvLT5zdWJiaW5hcnksICJ0IikgPT0gMCkKIAkJYXBw ZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksICIsIGJpbmFyeSA9IHRydWUiKTsKIAotCWlmIChzdHJj bXAoc3ViaW5mby0+c3Vic3RyZWFtLCAiZiIpICE9IDApCisJaWYgKHN0cmNtcChzdWJpbmZvLT5z dWJzdHJlYW0sICJ0IikgPT0gMCkKIAkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksICIsIHN0 cmVhbWluZyA9IG9uIik7CisJZWxzZSBpZiAoc3RyY21wKHN1YmluZm8tPnN1YnN0cmVhbSwgInAi KSA9PSAwKQorCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwgIiwgc3RyZWFtaW5nID0gcGFy YWxsZWwiKTsKIAogCWlmIChzdHJjbXAoc3ViaW5mby0+c3VidHdvcGhhc2VzdGF0ZSwgdHdvX3Bo YXNlX2Rpc2FibGVkKSAhPSAwKQogCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwgIiwgdHdv X3BoYXNlID0gb24iKTsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcHNxbC9kZXNjcmliZS5jIGIvc3Jj L2Jpbi9wc3FsL2Rlc2NyaWJlLmMKaW5kZXggNTIzZmFiNjFiOS4uNjY1NWYwNzcyMiAxMDA2NDQK LS0tIGEvc3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmMKKysrIGIvc3JjL2Jpbi9wc3FsL2Rlc2NyaWJl LmMKQEAgLTY1MDIsMTEgKzY1MDIsMjQgQEAgZGVzY3JpYmVTdWJzY3JpcHRpb25zKGNvbnN0IGNo YXIgKnBhdHRlcm4sIGJvb2wgdmVyYm9zZSkKIAl7CiAJCS8qIEJpbmFyeSBtb2RlIGFuZCBzdHJl YW1pbmcgYXJlIG9ubHkgc3VwcG9ydGVkIGluIHYxNCBhbmQgaGlnaGVyICovCiAJCWlmIChwc2V0 LnN2ZXJzaW9uID49IDE0MDAwMCkKKwkJewogCQkJYXBwZW5kUFFFeHBCdWZmZXIoJmJ1ZiwKLQkJ CQkJCQkgICIsIHN1YmJpbmFyeSBBUyBcIiVzXCJcbiIKLQkJCQkJCQkgICIsIHN1YnN0cmVhbSBB UyBcIiVzXCJcbiIsCi0JCQkJCQkJICBnZXR0ZXh0X25vb3AoIkJpbmFyeSIpLAotCQkJCQkJCSAg Z2V0dGV4dF9ub29wKCJTdHJlYW1pbmciKSk7CisJCQkJCQkJICAiLCBzdWJiaW5hcnkgQVMgXCIl c1wiXG4iLAorCQkJCQkJCSAgZ2V0dGV4dF9ub29wKCJCaW5hcnkiKSk7CisKKwkJCWlmIChwc2V0 LnN2ZXJzaW9uID49IDE2MDAwMCkKKwkJCQlhcHBlbmRQUUV4cEJ1ZmZlcigmYnVmLAorCQkJCQkJ CQkgICIsIChDQVNFIHN1YnN0cmVhbVxuIgorCQkJCQkJCQkgICIgICAgV0hFTiAnZicgVEhFTiAn b2ZmJ1xuIgorCQkJCQkJCQkgICIgICAgV0hFTiAndCcgVEhFTiAnb24nXG4iCisJCQkJCQkJCSAg IiAgICBXSEVOICdwJyBUSEVOICdwYXJhbGxlbCdcbiIKKwkJCQkJCQkJICAiICAgRU5EKSBBUyBc IiVzXCJcbiIsCisJCQkJCQkJCSAgZ2V0dGV4dF9ub29wKCJTdHJlYW1pbmciKSk7CisJCQllbHNl CisJCQkJYXBwZW5kUFFFeHBCdWZmZXIoJmJ1ZiwKKwkJCQkJCQkJICAiLCBzdWJzdHJlYW0gQVMg XCIlc1wiXG4iLAorCQkJCQkJCQkgIGdldHRleHRfbm9vcCgiU3RyZWFtaW5nIikpOworCQl9CiAK IAkJLyogVHdvX3BoYXNlIGFuZCBkaXNhYmxlX29uX2Vycm9yIGFyZSBvbmx5IHN1cHBvcnRlZCBp biB2MTUgYW5kIGhpZ2hlciAqLwogCQlpZiAocHNldC5zdmVyc2lvbiA+PSAxNTAwMDApCmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3N1YnNjcmlwdGlvbi5oIGIvc3JjL2luY2x1 ZGUvY2F0YWxvZy9wZ19zdWJzY3JpcHRpb24uaAppbmRleCBlYjRlZWI0NDhiLi5iMGYyYTE3MDVk IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3N1YnNjcmlwdGlvbi5oCisrKyBi L3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfc3Vic2NyaXB0aW9uLmgKQEAgLTgwLDcgKzgwLDggQEAg Q0FUQUxPRyhwZ19zdWJzY3JpcHRpb24sNjEwMCxTdWJzY3JpcHRpb25SZWxhdGlvbklkKSBCS0lf U0hBUkVEX1JFTEFUSU9OIEJLSV9ST1cKIAlib29sCQlzdWJiaW5hcnk7CQkvKiBUcnVlIGlmIHRo ZSBzdWJzY3JpcHRpb24gd2FudHMgdGhlCiAJCQkJCQkJCSAqIHB1Ymxpc2hlciB0byBzZW5kIGRh dGEgaW4gYmluYXJ5ICovCiAKLQlib29sCQlzdWJzdHJlYW07CQkvKiBTdHJlYW0gaW4tcHJvZ3Jl c3MgdHJhbnNhY3Rpb25zLiAqLworCWNoYXIJCXN1YnN0cmVhbTsJCS8qIFN0cmVhbSBpbi1wcm9n cmVzcyB0cmFuc2FjdGlvbnMuIFNlZQorCQkJCQkJCQkgKiBMT0dJQ0FMUkVQX1NUUkVBTV94eHgg Y29uc3RhbnRzLiAqLwogCiAJY2hhcgkJc3VidHdvcGhhc2VzdGF0ZTsJLyogU3RyZWFtIHR3by1w aGFzZSB0cmFuc2FjdGlvbnMgKi8KIApAQCAtMTI0LDcgKzEyNSw4IEBAIHR5cGVkZWYgc3RydWN0 IFN1YnNjcmlwdGlvbgogCWJvb2wJCWVuYWJsZWQ7CQkvKiBJbmRpY2F0ZXMgaWYgdGhlIHN1YnNj cmlwdGlvbiBpcyBlbmFibGVkICovCiAJYm9vbAkJYmluYXJ5OwkJCS8qIEluZGljYXRlcyBpZiB0 aGUgc3Vic2NyaXB0aW9uIHdhbnRzIGRhdGEgaW4KIAkJCQkJCQkJICogYmluYXJ5IGZvcm1hdCAq LwotCWJvb2wJCXN0cmVhbTsJCQkvKiBBbGxvdyBzdHJlYW1pbmcgaW4tcHJvZ3Jlc3MgdHJhbnNh Y3Rpb25zLiAqLworCWNoYXIJCXN0cmVhbTsJCQkvKiBBbGxvdyBzdHJlYW1pbmcgaW4tcHJvZ3Jl c3MgdHJhbnNhY3Rpb25zLgorCQkJCQkJCQkgKiBTZWUgTE9HSUNBTFJFUF9TVFJFQU1feHh4IGNv bnN0YW50cy4gKi8KIAljaGFyCQl0d29waGFzZXN0YXRlOwkvKiBBbGxvdyBzdHJlYW1pbmcgdHdv LXBoYXNlIHRyYW5zYWN0aW9ucyAqLwogCWJvb2wJCWRpc2FibGVvbmVycjsJLyogSW5kaWNhdGVz IGlmIHRoZSBzdWJzY3JpcHRpb24gc2hvdWxkIGJlCiAJCQkJCQkJCSAqIGF1dG9tYXRpY2FsbHkg ZGlzYWJsZWQgaWYgYSB3b3JrZXIgZXJyb3IKQEAgLTEzNyw2ICsxMzksMjEgQEAgdHlwZWRlZiBz dHJ1Y3QgU3Vic2NyaXB0aW9uCiAJCQkJCQkJCSAqIHNwZWNpZmllZCBvcmlnaW4gKi8KIH0gU3Vi c2NyaXB0aW9uOwogCisvKiBEaXNhbGxvdyBzdHJlYW1pbmcgaW4tcHJvZ3Jlc3MgdHJhbnNhY3Rp b25zLiAqLworI2RlZmluZSBMT0dJQ0FMUkVQX1NUUkVBTV9PRkYgJ2YnCisKKy8qCisgKiBTdHJl YW1pbmcgaW4tcHJvZ3Jlc3MgdHJhbnNhY3Rpb25zIGFyZSB3cml0dGVuIHRvIGEgdGVtcG9yYXJ5 IGZpbGUgYW5kCisgKiBhcHBsaWVkIG9ubHkgYWZ0ZXIgdGhlIHRyYW5zYWN0aW9uIGlzIGNvbW1p dHRlZCBvbiB1cHN0cmVhbS4KKyAqLworI2RlZmluZSBMT0dJQ0FMUkVQX1NUUkVBTV9PTiAndCcK KworLyoKKyAqIFN0cmVhbWluZyBpbi1wcm9ncmVzcyB0cmFuc2FjdGlvbnMgYXJlIGFwcGxpZWQg aW1tZWRpYXRlbHkgdmlhIGEgcGFyYWxsZWwKKyAqIGFwcGx5IHdvcmtlci4KKyAqLworI2RlZmlu ZSBMT0dJQ0FMUkVQX1NUUkVBTV9QQVJBTExFTCAncCcKKwogZXh0ZXJuIFN1YnNjcmlwdGlvbiAq R2V0U3Vic2NyaXB0aW9uKE9pZCBzdWJpZCwgYm9vbCBtaXNzaW5nX29rKTsKIGV4dGVybiB2b2lk IEZyZWVTdWJzY3JpcHRpb24oU3Vic2NyaXB0aW9uICpzdWIpOwogZXh0ZXJuIHZvaWQgRGlzYWJs ZVN1YnNjcmlwdGlvbihPaWQgc3ViaWQpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29tbWFu ZHMvc3Vic2NyaXB0aW9uY21kcy5oIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvc3Vic2NyaXB0aW9u Y21kcy5oCmluZGV4IGY1OWFhZjQ4NTcuLjIxNGRjNmMyOWUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL2NvbW1hbmRzL3N1YnNjcmlwdGlvbmNtZHMuaAorKysgYi9zcmMvaW5jbHVkZS9jb21tYW5k cy9zdWJzY3JpcHRpb25jbWRzLmgKQEAgLTI2LDQgKzI2LDYgQEAgZXh0ZXJuIHZvaWQgRHJvcFN1 YnNjcmlwdGlvbihEcm9wU3Vic2NyaXB0aW9uU3RtdCAqc3RtdCwgYm9vbCBpc1RvcExldmVsKTsK IGV4dGVybiBPYmplY3RBZGRyZXNzIEFsdGVyU3Vic2NyaXB0aW9uT3duZXIoY29uc3QgY2hhciAq bmFtZSwgT2lkIG5ld093bmVySWQpOwogZXh0ZXJuIHZvaWQgQWx0ZXJTdWJzY3JpcHRpb25Pd25l cl9vaWQoT2lkIHN1YmlkLCBPaWQgbmV3T3duZXJJZCk7CiAKK2V4dGVybiBjaGFyIGRlZkdldFN0 cmVhbWluZ01vZGUoRGVmRWxlbSAqZGVmKTsKKwogI2VuZGlmCQkJCQkJCS8qIFNVQlNDUklQVElP TkNNRFNfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbGxh dW5jaGVyLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2FsbGF1bmNoZXIuaAppbmRl eCBlMTY2MWI2YzkxLi5jODU1OTNhZDExIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNh dGlvbi9sb2dpY2FsbGF1bmNoZXIuaAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dp Y2FsbGF1bmNoZXIuaApAQCAtMTQsNiArMTQsNyBAQAogCiBleHRlcm4gUEdETExJTVBPUlQgaW50 IG1heF9sb2dpY2FsX3JlcGxpY2F0aW9uX3dvcmtlcnM7CiBleHRlcm4gUEdETExJTVBPUlQgaW50 IG1heF9zeW5jX3dvcmtlcnNfcGVyX3N1YnNjcmlwdGlvbjsKK2V4dGVybiBQR0RMTElNUE9SVCBp bnQgbWF4X3BhcmFsbGVsX2FwcGx5X3dvcmtlcnNfcGVyX3N1YnNjcmlwdGlvbjsKIAogZXh0ZXJu IHZvaWQgQXBwbHlMYXVuY2hlclJlZ2lzdGVyKHZvaWQpOwogZXh0ZXJuIHZvaWQgQXBwbHlMYXVu Y2hlck1haW4oRGF0dW0gbWFpbl9hcmcpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGlj YXRpb24vbG9naWNhbHByb3RvLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2FscHJv dG8uaAppbmRleCBkNjQyNjQzYWFlLi4wZWEyZGY1MDg4IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9yZXBsaWNhdGlvbi9sb2dpY2FscHJvdG8uaAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlv bi9sb2dpY2FscHJvdG8uaApAQCAtMzIsMTIgKzMyLDE3IEBACiAgKgogICogTE9HSUNBTFJFUF9Q Uk9UT19UV09QSEFTRV9WRVJTSU9OX05VTSBpcyB0aGUgbWluaW11bSBwcm90b2NvbCB2ZXJzaW9u IHdpdGgKICAqIHN1cHBvcnQgZm9yIHR3by1waGFzZSBjb21taXQgZGVjb2RpbmcgKGF0IHByZXBh cmUgdGltZSkuIEludHJvZHVjZWQgaW4gUEcxNS4KKyAqCisgKiBMT0dJQ0FMUkVQX1BST1RPX1NU UkVBTV9QQVJBTExFTF9WRVJTSU9OX05VTSBpcyB0aGUgbWluaW11bSBwcm90b2NvbCB2ZXJzaW9u CisgKiB3aGVyZSB3ZSBzdXBwb3J0IGFwcGx5aW5nIGxhcmdlIHN0cmVhbWluZyB0cmFuc2FjdGlv bnMgaW4gcGFyYWxsZWwuCisgKiBJbnRyb2R1Y2VkIGluIFBHMTYuCiAgKi8KICNkZWZpbmUgTE9H SUNBTFJFUF9QUk9UT19NSU5fVkVSU0lPTl9OVU0gMQogI2RlZmluZSBMT0dJQ0FMUkVQX1BST1RP X1ZFUlNJT05fTlVNIDEKICNkZWZpbmUgTE9HSUNBTFJFUF9QUk9UT19TVFJFQU1fVkVSU0lPTl9O VU0gMgogI2RlZmluZSBMT0dJQ0FMUkVQX1BST1RPX1RXT1BIQVNFX1ZFUlNJT05fTlVNIDMKLSNk ZWZpbmUgTE9HSUNBTFJFUF9QUk9UT19NQVhfVkVSU0lPTl9OVU0gTE9HSUNBTFJFUF9QUk9UT19U V09QSEFTRV9WRVJTSU9OX05VTQorI2RlZmluZSBMT0dJQ0FMUkVQX1BST1RPX1NUUkVBTV9QQVJB TExFTF9WRVJTSU9OX05VTSA0CisjZGVmaW5lIExPR0lDQUxSRVBfUFJPVE9fTUFYX1ZFUlNJT05f TlVNIExPR0lDQUxSRVBfUFJPVE9fU1RSRUFNX1BBUkFMTEVMX1ZFUlNJT05fTlVNCiAKIC8qCiAg KiBMb2dpY2FsIG1lc3NhZ2UgdHlwZXMKQEAgLTE3NSw2ICsxODAsMTcgQEAgdHlwZWRlZiBzdHJ1 Y3QgTG9naWNhbFJlcFJvbGxiYWNrUHJlcGFyZWRUeG5EYXRhCiAJY2hhcgkJZ2lkW0dJRFNJWkVd OwogfSBMb2dpY2FsUmVwUm9sbGJhY2tQcmVwYXJlZFR4bkRhdGE7CiAKKy8qCisgKiBUcmFuc2Fj dGlvbiBwcm90b2NvbCBpbmZvcm1hdGlvbiBmb3Igc3RyZWFtIGFib3J0LgorICovCit0eXBlZGVm IHN0cnVjdCBMb2dpY2FsUmVwU3RyZWFtQWJvcnREYXRhCit7CisJVHJhbnNhY3Rpb25JZCB4aWQ7 CisJVHJhbnNhY3Rpb25JZCBzdWJ4aWQ7CisJWExvZ1JlY1B0cglhYm9ydF9sc247CisJVGltZXN0 YW1wVHogYWJvcnRfdGltZTsKK30gTG9naWNhbFJlcFN0cmVhbUFib3J0RGF0YTsKKwogZXh0ZXJu IHZvaWQgbG9naWNhbHJlcF93cml0ZV9iZWdpbihTdHJpbmdJbmZvIG91dCwgUmVvcmRlckJ1ZmZl clRYTiAqdHhuKTsKIGV4dGVybiB2b2lkIGxvZ2ljYWxyZXBfcmVhZF9iZWdpbihTdHJpbmdJbmZv IGluLAogCQkJCQkJCQkgIExvZ2ljYWxSZXBCZWdpbkRhdGEgKmJlZ2luX2RhdGEpOwpAQCAtMjQ2 LDkgKzI2MiwxMyBAQCBleHRlcm4gdm9pZCBsb2dpY2FscmVwX3dyaXRlX3N0cmVhbV9jb21taXQo U3RyaW5nSW5mbyBvdXQsIFJlb3JkZXJCdWZmZXJUWE4gKnR4bgogZXh0ZXJuIFRyYW5zYWN0aW9u SWQgbG9naWNhbHJlcF9yZWFkX3N0cmVhbV9jb21taXQoU3RyaW5nSW5mbyBpbiwKIAkJCQkJCQkJ CQkJCSAgIExvZ2ljYWxSZXBDb21taXREYXRhICpjb21taXRfZGF0YSk7CiBleHRlcm4gdm9pZCBs b2dpY2FscmVwX3dyaXRlX3N0cmVhbV9hYm9ydChTdHJpbmdJbmZvIG91dCwgVHJhbnNhY3Rpb25J ZCB4aWQsCi0JCQkJCQkJCQkJICBUcmFuc2FjdGlvbklkIHN1YnhpZCk7Ci1leHRlcm4gdm9pZCBs b2dpY2FscmVwX3JlYWRfc3RyZWFtX2Fib3J0KFN0cmluZ0luZm8gaW4sIFRyYW5zYWN0aW9uSWQg KnhpZCwKLQkJCQkJCQkJCQkgVHJhbnNhY3Rpb25JZCAqc3VieGlkKTsKKwkJCQkJCQkJCQkgIFRy YW5zYWN0aW9uSWQgc3VieGlkLAorCQkJCQkJCQkJCSAgWExvZ1JlY1B0ciBhYm9ydF9sc24sCisJ CQkJCQkJCQkJICBUaW1lc3RhbXBUeiBhYm9ydF90aW1lLAorCQkJCQkJCQkJCSAgYm9vbCB3cml0 ZV9hYm9ydF9pbmZvKTsKK2V4dGVybiB2b2lkIGxvZ2ljYWxyZXBfcmVhZF9zdHJlYW1fYWJvcnQo U3RyaW5nSW5mbyBpbiwKKwkJCQkJCQkJCQkgTG9naWNhbFJlcFN0cmVhbUFib3J0RGF0YSAqYWJv cnRfZGF0YSwKKwkJCQkJCQkJCQkgYm9vbCByZWFkX2Fib3J0X2luZm8pOwogZXh0ZXJuIGNoYXIg KmxvZ2ljYWxyZXBfbWVzc2FnZV90eXBlKExvZ2ljYWxSZXBNc2dUeXBlIGFjdGlvbik7CiAKICNl bmRpZgkJCQkJCQkvKiBMT0dJQ0FMX1BST1RPX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L3JlcGxpY2F0aW9uL2xvZ2ljYWx3b3JrZXIuaCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xv Z2ljYWx3b3JrZXIuaAppbmRleCBmMWU3ZThhMzQ4Li42OTM1Y2IzOTQ3IDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2Fsd29ya2VyLmgKKysrIGIvc3JjL2luY2x1ZGUv cmVwbGljYXRpb24vbG9naWNhbHdvcmtlci5oCkBAIC0xMiw4ICsxMiwxNiBAQAogI2lmbmRlZiBM T0dJQ0FMV09SS0VSX0gKICNkZWZpbmUgTE9HSUNBTFdPUktFUl9ICiAKKyNpbmNsdWRlIDxzaWdu YWwuaD4KKworZXh0ZXJuIFBHRExMSU1QT1JUIHZvbGF0aWxlIHNpZ19hdG9taWNfdCBQYXJhbGxl bEFwcGx5TWVzc2FnZVBlbmRpbmc7CisKIGV4dGVybiB2b2lkIEFwcGx5V29ya2VyTWFpbihEYXR1 bSBtYWluX2FyZyk7CitleHRlcm4gdm9pZCBQYXJhbGxlbEFwcGx5V29ya2VyTWFpbihEYXR1bSBt YWluX2FyZyk7CiAKIGV4dGVybiBib29sIElzTG9naWNhbFdvcmtlcih2b2lkKTsKK2V4dGVybiBi b29sIElzTG9naWNhbFBhcmFsbGVsQXBwbHlXb3JrZXIodm9pZCk7CitleHRlcm4gdm9pZCBIYW5k bGVQYXJhbGxlbEFwcGx5TWVzc2FnZUludGVycnVwdCh2b2lkKTsKK2V4dGVybiB2b2lkIEhhbmRs ZVBhcmFsbGVsQXBwbHlNZXNzYWdlcyh2b2lkKTsKIAogI2VuZGlmCQkJCQkJCS8qIExPR0lDQUxX T1JLRVJfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vb3JpZ2luLmgg Yi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9vcmlnaW4uaAppbmRleCAzNzg1Zjk1ZmExLi41MzEz NTEwOTNlIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9vcmlnaW4uaAorKysg Yi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9vcmlnaW4uaApAQCAtNTMsNyArNTMsNyBAQCBleHRl cm4gWExvZ1JlY1B0ciByZXBsb3JpZ2luX2dldF9wcm9ncmVzcyhSZXBPcmlnaW5JZCBub2RlLCBi b29sIGZsdXNoKTsKIAogZXh0ZXJuIHZvaWQgcmVwbG9yaWdpbl9zZXNzaW9uX2FkdmFuY2UoWExv Z1JlY1B0ciByZW1vdGVfY29tbWl0LAogCQkJCQkJCQkJICAgWExvZ1JlY1B0ciBsb2NhbF9jb21t aXQpOwotZXh0ZXJuIHZvaWQgcmVwbG9yaWdpbl9zZXNzaW9uX3NldHVwKFJlcE9yaWdpbklkIG5v ZGUpOworZXh0ZXJuIHZvaWQgcmVwbG9yaWdpbl9zZXNzaW9uX3NldHVwKFJlcE9yaWdpbklkIG5v ZGUsIGludCBhY3F1aXJlZF9ieSk7CiBleHRlcm4gdm9pZCByZXBsb3JpZ2luX3Nlc3Npb25fcmVz ZXQodm9pZCk7CiBleHRlcm4gWExvZ1JlY1B0ciByZXBsb3JpZ2luX3Nlc3Npb25fZ2V0X3Byb2dy ZXNzKGJvb2wgZmx1c2gpOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9w Z291dHB1dC5oIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcGdvdXRwdXQuaAppbmRleCA2NjMz MTFhZmE5Li5iNGE4MDE1NDAzIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9w Z291dHB1dC5oCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Bnb3V0cHV0LmgKQEAgLTI2 LDcgKzI2LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgUEdPdXRwdXREYXRhCiAJTGlzdAkgICAqcHVibGlj YXRpb25fbmFtZXM7CiAJTGlzdAkgICAqcHVibGljYXRpb25zOwogCWJvb2wJCWJpbmFyeTsKLQli b29sCQlzdHJlYW1pbmc7CisJY2hhcgkJc3RyZWFtaW5nOwogCWJvb2wJCW1lc3NhZ2VzOwogCWJv b2wJCXR3b19waGFzZTsKIAljaGFyCSAgICpvcmlnaW47CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9yZXBsaWNhdGlvbi9yZW9yZGVyYnVmZmVyLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9y ZW9yZGVyYnVmZmVyLmgKaW5kZXggYTQyYTEyMDRkMy4uZjZjNGRkNzVkYiAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcmVvcmRlcmJ1ZmZlci5oCisrKyBiL3NyYy9pbmNsdWRl L3JlcGxpY2F0aW9uL3Jlb3JkZXJidWZmZXIuaApAQCAtMzE2LDYgKzMxNiw3IEBAIHR5cGVkZWYg c3RydWN0IFJlb3JkZXJCdWZmZXJUWE4KIAl7CiAJCVRpbWVzdGFtcFR6IGNvbW1pdF90aW1lOwog CQlUaW1lc3RhbXBUeiBwcmVwYXJlX3RpbWU7CisJCVRpbWVzdGFtcFR6IGFib3J0X3RpbWU7CiAJ fQkJCXhhY3RfdGltZTsKIAogCS8qCkBAIC02NzgsNyArNjc5LDggQEAgZXh0ZXJuIHZvaWQgUmVv cmRlckJ1ZmZlckFzc2lnbkNoaWxkKFJlb3JkZXJCdWZmZXIgKnJiLCBUcmFuc2FjdGlvbklkIHhp ZCwKIGV4dGVybiB2b2lkIFJlb3JkZXJCdWZmZXJDb21taXRDaGlsZChSZW9yZGVyQnVmZmVyICpy YiwgVHJhbnNhY3Rpb25JZCB4aWQsCiAJCQkJCQkJCQkgVHJhbnNhY3Rpb25JZCBzdWJ4aWQsIFhM b2dSZWNQdHIgY29tbWl0X2xzbiwKIAkJCQkJCQkJCSBYTG9nUmVjUHRyIGVuZF9sc24pOwotZXh0 ZXJuIHZvaWQgUmVvcmRlckJ1ZmZlckFib3J0KFJlb3JkZXJCdWZmZXIgKnJiLCBUcmFuc2FjdGlv bklkIHhpZCwgWExvZ1JlY1B0ciBsc24pOworZXh0ZXJuIHZvaWQgUmVvcmRlckJ1ZmZlckFib3J0 KFJlb3JkZXJCdWZmZXIgKnJiLCBUcmFuc2FjdGlvbklkIHhpZCwgWExvZ1JlY1B0ciBsc24sCisJ CQkJCQkJICAgVGltZXN0YW1wVHogYWJvcnRfdGltZSk7CiBleHRlcm4gdm9pZCBSZW9yZGVyQnVm ZmVyQWJvcnRPbGQoUmVvcmRlckJ1ZmZlciAqcmIsIFRyYW5zYWN0aW9uSWQgb2xkZXN0UnVubmlu Z1hpZCk7CiBleHRlcm4gdm9pZCBSZW9yZGVyQnVmZmVyRm9yZ2V0KFJlb3JkZXJCdWZmZXIgKnJi LCBUcmFuc2FjdGlvbklkIHhpZCwgWExvZ1JlY1B0ciBsc24pOwogZXh0ZXJuIHZvaWQgUmVvcmRl ckJ1ZmZlckludmFsaWRhdGUoUmVvcmRlckJ1ZmZlciAqcmIsIFRyYW5zYWN0aW9uSWQgeGlkLCBY TG9nUmVjUHRyIGxzbik7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93YWxy ZWNlaXZlci5oIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vd2FscmVjZWl2ZXIuaAppbmRleCBm ZDYxMzY4ZDU0Li5kZWNmZmUzNTJkIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlv bi93YWxyZWNlaXZlci5oCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3dhbHJlY2VpdmVy LmgKQEAgLTE4Miw3ICsxODIsNyBAQCB0eXBlZGVmIHN0cnVjdAogCQkJdWludDMyCQlwcm90b192 ZXJzaW9uOwkvKiBMb2dpY2FsIHByb3RvY29sIHZlcnNpb24gKi8KIAkJCUxpc3QJICAgKnB1Ymxp Y2F0aW9uX25hbWVzOwkvKiBTdHJpbmcgbGlzdCBvZiBwdWJsaWNhdGlvbnMgKi8KIAkJCWJvb2wJ CWJpbmFyeTsgLyogQXNrIHB1Ymxpc2hlciB0byB1c2UgYmluYXJ5ICovCi0JCQlib29sCQlzdHJl YW1pbmc7CS8qIFN0cmVhbWluZyBvZiBsYXJnZSB0cmFuc2FjdGlvbnMgKi8KKwkJCWNoYXIJICAg KnN0cmVhbWluZ19zdHI7CS8qIFN0cmVhbWluZyBvZiBsYXJnZSB0cmFuc2FjdGlvbnMgKi8KIAkJ CWJvb2wJCXR3b3BoYXNlOwkvKiBTdHJlYW1pbmcgb2YgdHdvLXBoYXNlIHRyYW5zYWN0aW9ucyBh dAogCQkJCQkJCQkJICogcHJlcGFyZSB0aW1lICovCiAJCQljaGFyCSAgICpvcmlnaW47IC8qIE9u bHkgcHVibGlzaCBkYXRhIG9yaWdpbmF0aW5nIGZyb20gdGhlCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9yZXBsaWNhdGlvbi93b3JrZXJfaW50ZXJuYWwuaCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0 aW9uL3dvcmtlcl9pbnRlcm5hbC5oCmluZGV4IDJhM2VjNWMyZDguLmRiODkxZWVhOGEgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3dvcmtlcl9pbnRlcm5hbC5oCisrKyBiL3Ny Yy9pbmNsdWRlL3JlcGxpY2F0aW9uL3dvcmtlcl9pbnRlcm5hbC5oCkBAIC0xNyw4ICsxNywxMyBA QAogI2luY2x1ZGUgImFjY2Vzcy94bG9nZGVmcy5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfc3Vi c2NyaXB0aW9uLmgiCiAjaW5jbHVkZSAiZGF0YXR5cGUvdGltZXN0YW1wLmgiCisjaW5jbHVkZSAi bWlzY2FkbWluLmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vbG9naWNhbHJlbGF0aW9uLmgiCisj aW5jbHVkZSAic3RvcmFnZS9idWZmaWxlLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9maWxlc2V0Lmgi CiAjaW5jbHVkZSAic3RvcmFnZS9sb2NrLmgiCisjaW5jbHVkZSAic3RvcmFnZS9zaG1fbXEuaCIK KyNpbmNsdWRlICJzdG9yYWdlL3NobV90b2MuaCIKICNpbmNsdWRlICJzdG9yYWdlL3NwaW4uaCIK IAogCkBAIC01MywxMyArNTgsMjQgQEAgdHlwZWRlZiBzdHJ1Y3QgTG9naWNhbFJlcFdvcmtlcgog CiAJLyoKIAkgKiBVc2VkIHRvIGNyZWF0ZSB0aGUgY2hhbmdlcyBhbmQgc3VieGFjdCBmaWxlcyBm b3IgdGhlIHN0cmVhbWluZwotCSAqIHRyYW5zYWN0aW9ucy4gIFVwb24gdGhlIGFycml2YWwgb2Yg dGhlIGZpcnN0IHN0cmVhbWluZyB0cmFuc2FjdGlvbiwgdGhlCi0JICogZmlsZXNldCB3aWxsIGJl IGluaXRpYWxpemVkLCBhbmQgaXQgd2lsbCBiZSBkZWxldGVkIHdoZW4gdGhlIHdvcmtlcgotCSAq IGV4aXRzLiAgVW5kZXIgdGhpcywgc2VwYXJhdGUgYnVmZmlsZXMgd291bGQgYmUgY3JlYXRlZCBm b3IgZWFjaAotCSAqIHRyYW5zYWN0aW9uIHdoaWNoIHdpbGwgYmUgZGVsZXRlZCBhZnRlciB0aGUg dHJhbnNhY3Rpb24gaXMgZmluaXNoZWQuCisJICogdHJhbnNhY3Rpb25zLiAgVXBvbiB0aGUgYXJy aXZhbCBvZiB0aGUgZmlyc3Qgc3RyZWFtaW5nIHRyYW5zYWN0aW9uIG9yCisJICogd2hlbiB0aGUg Zmlyc3QtdGltZSBsZWFkZXIgYXBwbHkgd29ya2VyIHRpbWVzIG91dCB3aGlsZSBzZW5kaW5nIGNo YW5nZXMKKwkgKiB0byB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyLCB0aGUgZmlsZXNldCB3aWxs IGJlIGluaXRpYWxpemVkLCBhbmQgaXQKKwkgKiB3aWxsIGJlIGRlbGV0ZWQgd2hlbiB0aGUgd29y a2VyIGV4aXRzLiAgVW5kZXIgdGhpcywgc2VwYXJhdGUgYnVmZmlsZXMKKwkgKiB3b3VsZCBiZSBj cmVhdGVkIGZvciBlYWNoIHRyYW5zYWN0aW9uIHdoaWNoIHdpbGwgYmUgZGVsZXRlZCBhZnRlciB0 aGUKKwkgKiB0cmFuc2FjdGlvbiBpcyBmaW5pc2hlZC4KIAkgKi8KIAlGaWxlU2V0ICAgICpzdHJl YW1fZmlsZXNldDsKIAorCS8qCisJICogUElEIG9mIGxlYWRlciBhcHBseSB3b3JrZXIgaWYgdGhp cyBzbG90IGlzIHVzZWQgZm9yIGEgcGFyYWxsZWwgYXBwbHkKKwkgKiB3b3JrZXIsIEludmFsaWRQ aWQgb3RoZXJ3aXNlLgorCSAqLworCXBpZF90CQlhcHBseV9sZWFkZXJfcGlkOworCisJLyogSW5k aWNhdGVzIHdoZXRoZXIgYXBwbHkgY2FuIGJlIHBlcmZvcm1lZCBpbiBwYXJhbGxlbC4gKi8KKwli b29sCQlwYXJhbGxlbF9hcHBseTsKKwogCS8qIFN0YXRzLiAqLwogCVhMb2dSZWNQdHIJbGFzdF9s c247CiAJVGltZXN0YW1wVHogbGFzdF9zZW5kX3RpbWU7CkBAIC02OCw5ICs4NCwxMzggQEAgdHlw ZWRlZiBzdHJ1Y3QgTG9naWNhbFJlcFdvcmtlcgogCVRpbWVzdGFtcFR6IHJlcGx5X3RpbWU7CiB9 IExvZ2ljYWxSZXBXb3JrZXI7CiAKKy8qCisgKiBTdGF0ZSBvZiB0aGUgdHJhbnNhY3Rpb24gaW4g cGFyYWxsZWwgYXBwbHkgd29ya2VyLgorICoKKyAqIFRoZSBlbnVtIHZhbHVlcyBtdXN0IGhhdmUg dGhlIHNhbWUgb3JkZXIgYXMgdGhlIHRyYW5zYWN0aW9uIHN0YXRlCisgKiB0cmFuc2l0aW9ucy4K KyAqLwordHlwZWRlZiBlbnVtIFBhcmFsbGVsVHJhbnNTdGF0ZQoreworCVBBUkFMTEVMX1RSQU5T X1VOS05PV04sCisJUEFSQUxMRUxfVFJBTlNfU1RBUlRFRCwKKwlQQVJBTExFTF9UUkFOU19GSU5J U0hFRAorfSBQYXJhbGxlbFRyYW5zU3RhdGU7CisKKy8qCisgKiBTdGF0ZSBvZiBmaWxlc2V0IHVz ZWQgdG8gY29tbXVuaWNhdGUgY2hhbmdlcyBmcm9tIGxlYWRlciB0byBwYXJhbGxlbAorICogYXBw bHkgd29ya2VyLgorICoKKyAqIEZTX0VNUFRZIGluZGljYXRlcyBhbiBpbml0aWFsIHN0YXRlIHdo ZXJlIHRoZSBsZWFkZXIgZG9lc24ndCBuZWVkIHRvIHVzZQorICogdGhlIGZpbGUgdG8gY29tbXVu aWNhdGUgd2l0aCB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyLgorICoKKyAqIEZTX1NFUklBTEla RV9JTl9QUk9HUkVTUyBpbmRpY2F0ZXMgdGhhdCB0aGUgbGVhZGVyIGlzIHNlcmlhbGl6aW5nIGNo YW5nZXMKKyAqIHRvIHRoZSBmaWxlLgorICoKKyAqIEZTX1NFUklBTElaRV9ET05FIGluZGljYXRl cyB0aGF0IHRoZSBsZWFkZXIgaGFzIHNlcmlhbGl6ZWQgYWxsIGNoYW5nZXMgdG8KKyAqIHRoZSBm aWxlLgorICoKKyAqIEZTX1JFQURZIGluZGljYXRlcyB0aGF0IGl0IGlzIG5vdyBvayBmb3IgYSBw YXJhbGxlbCBhcHBseSB3b3JrZXIgdG8KKyAqIHJlYWQgdGhlIGZpbGUuCisgKi8KK3R5cGVkZWYg ZW51bSBQYXJ0aWFsRmlsZVNldFN0YXRlCit7CisJRlNfRU1QVFksCisJRlNfU0VSSUFMSVpFX0lO X1BST0dSRVNTLAorCUZTX1NFUklBTElaRV9ET05FLAorCUZTX1JFQURZCit9IFBhcnRpYWxGaWxl U2V0U3RhdGU7CisKKy8qCisgKiBTdHJ1Y3QgZm9yIHNoYXJpbmcgaW5mb3JtYXRpb24gYmV0d2Vl biBsZWFkZXIgYXBwbHkgd29ya2VyIGFuZCBwYXJhbGxlbAorICogYXBwbHkgd29ya2Vycy4KKyAq LwordHlwZWRlZiBzdHJ1Y3QgUGFyYWxsZWxBcHBseVdvcmtlclNoYXJlZAoreworCXNsb2NrX3QJ CW11dGV4OworCisJVHJhbnNhY3Rpb25JZCB4aWQ7CisKKwkvKgorCSAqIFN0YXRlIHVzZWQgdG8g ZW5zdXJlIGNvbW1pdCBvcmRlcmluZy4KKwkgKgorCSAqIFRoZSBwYXJhbGxlbCBhcHBseSB3b3Jr ZXIgd2lsbCBzZXQgaXQgdG8gUEFSQUxMRUxfVFJBTlNfRklOSVNIRUQgYWZ0ZXIKKwkgKiBoYW5k bGluZyB0aGUgdHJhbnNhY3Rpb24gZmluaXNoIGNvbW1hbmRzIHdoaWxlIHRoZSBhcHBseSBsZWFk ZXIgd2lsbAorCSAqIHdhaXQgZm9yIGl0IHRvIGJlY29tZSBQQVJBTExFTF9UUkFOU19GSU5JU0hF RCBiZWZvcmUgcHJvY2VlZGluZyBpbgorCSAqIHRyYW5zYWN0aW9uIGZpbmlzaCBjb21tYW5kcyAo ZS5nLiBTVFJFQU1fQ09NTUlUL1NUUkVBTV9QUkVQQVJFLworCSAqIFNUUkVBTV9BQk9SVCkuCisJ ICovCisJUGFyYWxsZWxUcmFuc1N0YXRlIHhhY3Rfc3RhdGU7CisKKwkvKiBJbmZvcm1hdGlvbiBm cm9tIHRoZSBjb3JyZXNwb25kaW5nIExvZ2ljYWxSZXBXb3JrZXIgc2xvdC4gKi8KKwl1aW50MTYJ CWxvZ2ljYWxyZXBfd29ya2VyX2dlbmVyYXRpb247CisJaW50CQkJbG9naWNhbHJlcF93b3JrZXJf c2xvdF9ubzsKKworCS8qCisJICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlcmUgYXJlIHBlbmRpbmcg c3RyZWFtaW5nIGJsb2NrcyBpbiB0aGUgcXVldWUuIFRoZQorCSAqIHBhcmFsbGVsIGFwcGx5IHdv cmtlciB3aWxsIGNoZWNrIGl0IGJlZm9yZSBzdGFydGluZyB0byB3YWl0LgorCSAqLworCXBnX2F0 b21pY191aW50MzIgcGVuZGluZ19zdHJlYW1fY291bnQ7CisKKwkvKgorCSAqIFhhY3RMYXN0Q29t bWl0RW5kIGZyb20gdGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlci4gVGhpcyBpcyByZXF1aXJlZCBi eQorCSAqIHRoZSBsZWFkZXIgd29ya2VyIHNvIGl0IGNhbiB1cGRhdGUgdGhlIGxzbl9tYXBwaW5n cy4KKwkgKi8KKwlYTG9nUmVjUHRyCWxhc3RfY29tbWl0X2VuZDsKKworCS8qCisJICogQWZ0ZXIg ZW50ZXJpbmcgUEFSVElBTF9TRVJJQUxJWkUgbW9kZSwgdGhlIGxlYWRlciBhcHBseSB3b3JrZXIg d2lsbAorCSAqIHNlcmlhbGl6ZSBjaGFuZ2VzIHRvIHRoZSBmaWxlLCBhbmQgc2hhcmUgdGhlIGZp bGVzZXQgd2l0aCB0aGUgcGFyYWxsZWwKKwkgKiBhcHBseSB3b3JrZXIgd2hlbiBwcm9jZXNzaW5n IHRoZSB0cmFuc2FjdGlvbiBmaW5pc2ggY29tbWFuZC4gVGhlbiB0aGUKKwkgKiBwYXJhbGxlbCBh cHBseSB3b3JrZXIgd2lsbCBhcHBseSBhbGwgdGhlIHNwb29sZWQgbWVzc2FnZXMuCisJICoKKwkg KiBGaWxlU2V0IGlzIHVzZWQgaGVyZSBpbnN0ZWFkIG9mIFNoYXJlZEZpbGVTZXQgYmVjYXVzZSB3 ZSBuZWVkIGl0IHRvCisJICogc3Vydml2ZSBhZnRlciByZWxlYXNpbmcgdGhlIHNoYXJlZCBtZW1v cnkgc28gdGhhdCB0aGUgbGVhZGVyIGFwcGx5CisJICogd29ya2VyIGNhbiByZS11c2UgdGhlIHNh bWUgZmlsZXNldCBmb3IgdGhlIG5leHQgc3RyZWFtaW5nIHRyYW5zYWN0aW9uLgorCSAqLworCVBh cnRpYWxGaWxlU2V0U3RhdGUgZmlsZXNldF9zdGF0ZTsKKwlGaWxlU2V0CQlmaWxlc2V0OworfSBQ YXJhbGxlbEFwcGx5V29ya2VyU2hhcmVkOworCisvKgorICogSW5mb3JtYXRpb24gd2hpY2ggaXMg dXNlZCB0byBtYW5hZ2UgdGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlci4KKyAqLwordHlwZWRlZiBz dHJ1Y3QgUGFyYWxsZWxBcHBseVdvcmtlckluZm8KK3sKKwkvKgorCSAqIFRoaXMgcXVldWUgaXMg dXNlZCB0byBzZW5kIGNoYW5nZXMgZnJvbSB0aGUgbGVhZGVyIGFwcGx5IHdvcmtlciB0byB0aGUK KwkgKiBwYXJhbGxlbCBhcHBseSB3b3JrZXIuCisJICovCisJc2htX21xX2hhbmRsZSAqbXFfaGFu ZGxlOworCisJLyoKKwkgKiBUaGlzIHF1ZXVlIGlzIHVzZWQgdG8gdHJhbnNmZXIgZXJyb3IgbWVz c2FnZXMgZnJvbSB0aGUgcGFyYWxsZWwgYXBwbHkKKwkgKiB3b3JrZXIgdG8gdGhlIGxlYWRlciBh cHBseSB3b3JrZXIuCisJICovCisJc2htX21xX2hhbmRsZSAqZXJyb3JfbXFfaGFuZGxlOworCisJ ZHNtX3NlZ21lbnQgKmRzbV9zZWc7CisKKwkvKgorCSAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBs ZWFkZXIgYXBwbHkgd29ya2VyIG5lZWRzIHRvIHNlcmlhbGl6ZSB0aGUKKwkgKiByZW1haW5pbmcg Y2hhbmdlcyB0byBhIGZpbGUgZHVlIHRvIHRpbWVvdXQgd2hlbiBhdHRlbXB0aW5nIHRvIHNlbmQg ZGF0YQorCSAqIHRvIHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgdmlhIHNoYXJlZCBtZW1vcnku CisJICovCisJYm9vbAkJc2VyaWFsaXplX2NoYW5nZXM7CisKKwkvKgorCSAqIFRydWUgaWYgdGhl IHdvcmtlciBpcyBiZWluZyB1c2VkIHRvIHByb2Nlc3MgYSBwYXJhbGxlbCBhcHBseQorCSAqIHRy YW5zYWN0aW9uLiBGYWxzZSBpbmRpY2F0ZXMgdGhpcyB3b3JrZXIgaXMgYXZhaWxhYmxlIGZvciBy ZS11c2UuCisJICovCisJYm9vbAkJaW5fdXNlOworCisJUGFyYWxsZWxBcHBseVdvcmtlclNoYXJl ZCAqc2hhcmVkOworfSBQYXJhbGxlbEFwcGx5V29ya2VySW5mbzsKKwogLyogTWFpbiBtZW1vcnkg Y29udGV4dCBmb3IgYXBwbHkgd29ya2VyLiBQZXJtYW5lbnQgZHVyaW5nIHdvcmtlciBsaWZldGlt ZS4gKi8KIGV4dGVybiBQR0RMTElNUE9SVCBNZW1vcnlDb250ZXh0IEFwcGx5Q29udGV4dDsKIAor ZXh0ZXJuIFBHRExMSU1QT1JUIE1lbW9yeUNvbnRleHQgQXBwbHlNZXNzYWdlQ29udGV4dDsKKwor ZXh0ZXJuIFBHRExMSU1QT1JUIEVycm9yQ29udGV4dENhbGxiYWNrICphcHBseV9lcnJvcl9jb250 ZXh0X3N0YWNrOworCitleHRlcm4gUEdETExJTVBPUlQgUGFyYWxsZWxBcHBseVdvcmtlclNoYXJl ZCAqTXlQYXJhbGxlbFNoYXJlZDsKKwogLyogbGlicHFyZWNlaXZlciBjb25uZWN0aW9uICovCiBl eHRlcm4gUEdETExJTVBPUlQgc3RydWN0IFdhbFJlY2VpdmVyQ29ubiAqTG9nUmVwV29ya2VyV2Fs UmN2Q29ubjsKIApAQCAtODQsOSArMjI5LDExIEBAIGV4dGVybiB2b2lkIGxvZ2ljYWxyZXBfd29y a2VyX2F0dGFjaChpbnQgc2xvdCk7CiBleHRlcm4gTG9naWNhbFJlcFdvcmtlciAqbG9naWNhbHJl cF93b3JrZXJfZmluZChPaWQgc3ViaWQsIE9pZCByZWxpZCwKIAkJCQkJCQkJCQkJCWJvb2wgb25s eV9ydW5uaW5nKTsKIGV4dGVybiBMaXN0ICpsb2dpY2FscmVwX3dvcmtlcnNfZmluZChPaWQgc3Vi aWQsIGJvb2wgb25seV9ydW5uaW5nKTsKLWV4dGVybiB2b2lkIGxvZ2ljYWxyZXBfd29ya2VyX2xh dW5jaChPaWQgZGJpZCwgT2lkIHN1YmlkLCBjb25zdCBjaGFyICpzdWJuYW1lLAotCQkJCQkJCQkJ IE9pZCB1c2VyaWQsIE9pZCByZWxpZCk7CitleHRlcm4gYm9vbCBsb2dpY2FscmVwX3dvcmtlcl9s YXVuY2goT2lkIGRiaWQsIE9pZCBzdWJpZCwgY29uc3QgY2hhciAqc3VibmFtZSwKKwkJCQkJCQkJ CSBPaWQgdXNlcmlkLCBPaWQgcmVsaWQsCisJCQkJCQkJCQkgZHNtX2hhbmRsZSBzdWJ3b3JrZXJf ZHNtKTsKIGV4dGVybiB2b2lkIGxvZ2ljYWxyZXBfd29ya2VyX3N0b3AoT2lkIHN1YmlkLCBPaWQg cmVsaWQpOworZXh0ZXJuIHZvaWQgbG9naWNhbHJlcF9wYV93b3JrZXJfc3RvcChpbnQgc2xvdF9u bywgdWludDE2IGdlbmVyYXRpb24pOwogZXh0ZXJuIHZvaWQgbG9naWNhbHJlcF93b3JrZXJfd2Fr ZXVwKE9pZCBzdWJpZCwgT2lkIHJlbGlkKTsKIGV4dGVybiB2b2lkIGxvZ2ljYWxyZXBfd29ya2Vy X3dha2V1cF9wdHIoTG9naWNhbFJlcFdvcmtlciAqd29ya2VyKTsKIApAQCAtMTAzLDEwICsyNTAs NzggQEAgZXh0ZXJuIHZvaWQgcHJvY2Vzc19zeW5jaW5nX3RhYmxlcyhYTG9nUmVjUHRyIGN1cnJl bnRfbHNuKTsKIGV4dGVybiB2b2lkIGludmFsaWRhdGVfc3luY2luZ190YWJsZV9zdGF0ZXMoRGF0 dW0gYXJnLCBpbnQgY2FjaGVpZCwKIAkJCQkJCQkJCQkJdWludDMyIGhhc2h2YWx1ZSk7CiAKK2V4 dGVybiB2b2lkIHN0cmVhbV9zdGFydF9pbnRlcm5hbChUcmFuc2FjdGlvbklkIHhpZCwgYm9vbCBm aXJzdF9zZWdtZW50KTsKK2V4dGVybiB2b2lkIHN0cmVhbV9zdG9wX2ludGVybmFsKFRyYW5zYWN0 aW9uSWQgeGlkKTsKKworLyogQ29tbW9uIHN0cmVhbWluZyBmdW5jdGlvbiB0byBhcHBseSBhbGwg dGhlIHNwb29sZWQgbWVzc2FnZXMgKi8KK2V4dGVybiB2b2lkIGFwcGx5X3Nwb29sZWRfbWVzc2Fn ZXMoRmlsZVNldCAqc3RyZWFtX2ZpbGVzZXQsIFRyYW5zYWN0aW9uSWQgeGlkLAorCQkJCQkJCQkg ICBYTG9nUmVjUHRyIGxzbik7CisKK2V4dGVybiB2b2lkIGFwcGx5X2Rpc3BhdGNoKFN0cmluZ0lu Zm8gcyk7CisKK2V4dGVybiB2b2lkIG1heWJlX3JlcmVhZF9zdWJzY3JpcHRpb24odm9pZCk7CisK K2V4dGVybiB2b2lkIHN0cmVhbV9jbGVhbnVwX2ZpbGVzKE9pZCBzdWJpZCwgVHJhbnNhY3Rpb25J ZCB4aWQpOworCitleHRlcm4gdm9pZCBJbml0aWFsaXplQXBwbHlXb3JrZXIodm9pZCk7CisKK2V4 dGVybiB2b2lkIHN0b3JlX2ZsdXNoX3Bvc2l0aW9uKFhMb2dSZWNQdHIgcmVtb3RlX2xzbiwgWExv Z1JlY1B0ciBsb2NhbF9sc24pOworCisvKiBGdW5jdGlvbiBmb3IgYXBwbHkgZXJyb3IgY2FsbGJh Y2sgKi8KK2V4dGVybiB2b2lkIGFwcGx5X2Vycm9yX2NhbGxiYWNrKHZvaWQgKmFyZyk7CitleHRl cm4gdm9pZCBzZXRfYXBwbHlfZXJyb3JfY29udGV4dF9vcmlnaW4oY2hhciAqb3JpZ2lubmFtZSk7 CisKKy8qIFBhcmFsbGVsIGFwcGx5IHdvcmtlciBzZXR1cCBhbmQgaW50ZXJhY3Rpb25zICovCitl eHRlcm4gdm9pZCBwYV9hbGxvY2F0ZV93b3JrZXIoVHJhbnNhY3Rpb25JZCB4aWQpOworZXh0ZXJu IFBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICpwYV9maW5kX3dvcmtlcihUcmFuc2FjdGlvbklkIHhp ZCk7CitleHRlcm4gdm9pZCBwYV9kZXRhY2hfYWxsX2Vycm9yX21xKHZvaWQpOworCitleHRlcm4g Ym9vbCBwYV9zZW5kX2RhdGEoUGFyYWxsZWxBcHBseVdvcmtlckluZm8gKndpbmZvLCBTaXplIG5i eXRlcywKKwkJCQkJCSBjb25zdCB2b2lkICpkYXRhKTsKK2V4dGVybiB2b2lkIHBhX3N3aXRjaF90 b19wYXJ0aWFsX3NlcmlhbGl6ZShQYXJhbGxlbEFwcGx5V29ya2VySW5mbyAqd2luZm8sCisJCQkJ CQkJCQkJICAgYm9vbCBzdHJlYW1fbG9ja2VkKTsKKworZXh0ZXJuIHZvaWQgcGFfc2V0X3hhY3Rf c3RhdGUoUGFyYWxsZWxBcHBseVdvcmtlclNoYXJlZCAqd3NoYXJlZCwKKwkJCQkJCQkgIFBhcmFs bGVsVHJhbnNTdGF0ZSBpbl94YWN0KTsKK2V4dGVybiB2b2lkIHBhX3NldF9zdHJlYW1fYXBwbHlf d29ya2VyKFBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICp3aW5mbyk7CisKK2V4dGVybiB2b2lkIHBh X3N0YXJ0X3N1YnRyYW5zKFRyYW5zYWN0aW9uSWQgY3VycmVudF94aWQsCisJCQkJCQkJICBUcmFu c2FjdGlvbklkIHRvcF94aWQpOworZXh0ZXJuIHZvaWQgcGFfcmVzZXRfc3VidHJhbnModm9pZCk7 CitleHRlcm4gdm9pZCBwYV9zdHJlYW1fYWJvcnQoTG9naWNhbFJlcFN0cmVhbUFib3J0RGF0YSAq YWJvcnRfZGF0YSk7CitleHRlcm4gdm9pZCBwYV9zZXRfZmlsZXNldF9zdGF0ZShQYXJhbGxlbEFw cGx5V29ya2VyU2hhcmVkICp3c2hhcmVkLAorCQkJCQkJCQkgUGFydGlhbEZpbGVTZXRTdGF0ZSBm aWxlc2V0X3N0YXRlKTsKKworZXh0ZXJuIHZvaWQgcGFfbG9ja19zdHJlYW0oVHJhbnNhY3Rpb25J ZCB4aWQsIExPQ0tNT0RFIGxvY2ttb2RlKTsKK2V4dGVybiB2b2lkIHBhX3VubG9ja19zdHJlYW0o VHJhbnNhY3Rpb25JZCB4aWQsIExPQ0tNT0RFIGxvY2ttb2RlKTsKKworZXh0ZXJuIHZvaWQgcGFf bG9ja190cmFuc2FjdGlvbihUcmFuc2FjdGlvbklkIHhpZCwgTE9DS01PREUgbG9ja21vZGUpOwor ZXh0ZXJuIHZvaWQgcGFfdW5sb2NrX3RyYW5zYWN0aW9uKFRyYW5zYWN0aW9uSWQgeGlkLCBMT0NL TU9ERSBsb2NrbW9kZSk7CisKK2V4dGVybiB2b2lkIHBhX2RlY3JfYW5kX3dhaXRfc3RyZWFtX2Js b2NrKHZvaWQpOworCitleHRlcm4gdm9pZCBwYV94YWN0X2ZpbmlzaChQYXJhbGxlbEFwcGx5V29y a2VySW5mbyAqd2luZm8sCisJCQkJCQkgICBYTG9nUmVjUHRyIHJlbW90ZV9sc24pOworCisjZGVm aW5lIGlzUGFyYWxsZWxBcHBseVdvcmtlcih3b3JrZXIpICgod29ya2VyKS0+YXBwbHlfbGVhZGVy X3BpZCAhPSBJbnZhbGlkUGlkKQorCiBzdGF0aWMgaW5saW5lIGJvb2wKIGFtX3RhYmxlc3luY193 b3JrZXIodm9pZCkKIHsKIAlyZXR1cm4gT2lkSXNWYWxpZChNeUxvZ2ljYWxSZXBXb3JrZXItPnJl bGlkKTsKIH0KIAorc3RhdGljIGlubGluZSBib29sCithbV9sZWFkZXJfYXBwbHlfd29ya2VyKHZv aWQpCit7CisJcmV0dXJuICghYW1fdGFibGVzeW5jX3dvcmtlcigpICYmCisJCQkhaXNQYXJhbGxl bEFwcGx5V29ya2VyKE15TG9naWNhbFJlcFdvcmtlcikpOworfQorCitzdGF0aWMgaW5saW5lIGJv b2wKK2FtX3BhcmFsbGVsX2FwcGx5X3dvcmtlcih2b2lkKQoreworCXJldHVybiBpc1BhcmFsbGVs QXBwbHlXb3JrZXIoTXlMb2dpY2FsUmVwV29ya2VyKTsKK30KKwogI2VuZGlmCQkJCQkJCS8qIFdP UktFUl9JTlRFUk5BTF9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2xtZ3Iu aCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvbG1nci5oCmluZGV4IDk5NWM4ZThmZDMuLjRlZTkxZTNj ZjkgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvbG1nci5oCisrKyBiL3NyYy9pbmNs dWRlL3N0b3JhZ2UvbG1nci5oCkBAIC0xMDcsNiArMTA3LDExIEBAIGV4dGVybiB2b2lkIExvY2tT aGFyZWRPYmplY3RGb3JTZXNzaW9uKE9pZCBjbGFzc2lkLCBPaWQgb2JqaWQsIHVpbnQxNiBvYmpz dWJpZCwKIGV4dGVybiB2b2lkIFVubG9ja1NoYXJlZE9iamVjdEZvclNlc3Npb24oT2lkIGNsYXNz aWQsIE9pZCBvYmppZCwgdWludDE2IG9ianN1YmlkLAogCQkJCQkJCQkJCSBMT0NLTU9ERSBsb2Nr bW9kZSk7CiAKK2V4dGVybiB2b2lkIExvY2tBcHBseVRyYW5zYWN0aW9uRm9yU2Vzc2lvbihPaWQg c3Vib2lkLCBUcmFuc2FjdGlvbklkIHhpZCwgdWludDE2IG9iamlkLAorCQkJCQkJCQkJCSAgIExP Q0tNT0RFIGxvY2ttb2RlKTsKK2V4dGVybiB2b2lkIFVubG9ja0FwcGx5VHJhbnNhY3Rpb25Gb3JT ZXNzaW9uKE9pZCBzdWJvaWQsIFRyYW5zYWN0aW9uSWQgeGlkLCB1aW50MTYgb2JqaWQsCisJCQkJ CQkJCQkJCSBMT0NLTU9ERSBsb2NrbW9kZSk7CisKIC8qIERlc2NyaWJlIGEgbG9ja3RhZyBmb3Ig ZXJyb3IgbWVzc2FnZXMgKi8KIGV4dGVybiB2b2lkIERlc2NyaWJlTG9ja1RhZyhTdHJpbmdJbmZv IGJ1ZiwgY29uc3QgTE9DS1RBRyAqdGFnKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3Rv cmFnZS9sb2NrLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2xvY2suaAppbmRleCA5YTcxOTM0OGJj Li4xOTBiZGRiNzY3IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2xvY2suaAorKysg Yi9zcmMvaW5jbHVkZS9zdG9yYWdlL2xvY2suaApAQCAtMTQ5LDEwICsxNDksMTIgQEAgdHlwZWRl ZiBlbnVtIExvY2tUYWdUeXBlCiAJTE9DS1RBR19TUEVDVUxBVElWRV9UT0tFTiwJLyogc3BlY3Vs YXRpdmUgaW5zZXJ0aW9uIFhpZCBhbmQgdG9rZW4gKi8KIAlMT0NLVEFHX09CSkVDVCwJCQkJLyog bm9uLXJlbGF0aW9uIGRhdGFiYXNlIG9iamVjdCAqLwogCUxPQ0tUQUdfVVNFUkxPQ0ssCQkJLyog cmVzZXJ2ZWQgZm9yIG9sZCBjb250cmliL3VzZXJsb2NrIGNvZGUgKi8KLQlMT0NLVEFHX0FEVklT T1JZCQkJLyogYWR2aXNvcnkgdXNlciBsb2NrcyAqLworCUxPQ0tUQUdfQURWSVNPUlksCQkJLyog YWR2aXNvcnkgdXNlciBsb2NrcyAqLworCUxPQ0tUQUdfQVBQTFlfVFJBTlNBQ1RJT04JLyogdHJh bnNhY3Rpb24gYmVpbmcgYXBwbGllZCBvbiBhIGxvZ2ljYWwKKwkJCQkJCQkJICogcmVwbGljYXRp b24gc3Vic2NyaWJlciAqLwogfSBMb2NrVGFnVHlwZTsKIAotI2RlZmluZSBMT0NLVEFHX0xBU1Rf VFlQRQlMT0NLVEFHX0FEVklTT1JZCisjZGVmaW5lIExPQ0tUQUdfTEFTVF9UWVBFCUxPQ0tUQUdf QVBQTFlfVFJBTlNBQ1RJT04KIAogZXh0ZXJuIFBHRExMSU1QT1JUIGNvbnN0IGNoYXIgKmNvbnN0 IExvY2tUYWdUeXBlTmFtZXNbXTsKIApAQCAtMjc4LDYgKzI4MCwxNyBAQCB0eXBlZGVmIHN0cnVj dCBMT0NLVEFHCiAJIChsb2NrdGFnKS5sb2NrdGFnX3R5cGUgPSBMT0NLVEFHX0FEVklTT1JZLCBc CiAJIChsb2NrdGFnKS5sb2NrdGFnX2xvY2ttZXRob2RpZCA9IFVTRVJfTE9DS01FVEhPRCkKIAor LyoKKyAqIElEIGluZm8gZm9yIGEgcmVtb3RlIHRyYW5zYWN0aW9uIG9uIGEgbG9naWNhbCByZXBs aWNhdGlvbiBzdWJzY3JpYmVyIGlzOiBEQgorICogT0lEICsgU1VCU0NSSVBUSU9OIE9JRCArIFRS QU5TQUNUSU9OIElEICsgT0JKSUQKKyAqLworI2RlZmluZSBTRVRfTE9DS1RBR19BUFBMWV9UUkFO U0FDVElPTihsb2NrdGFnLGRib2lkLHN1Ym9pZCx4aWQsb2JqaWQpIFwKKwkoKGxvY2t0YWcpLmxv Y2t0YWdfZmllbGQxID0gKGRib2lkKSwgXAorCSAobG9ja3RhZykubG9ja3RhZ19maWVsZDIgPSAo c3Vib2lkKSwgXAorCSAobG9ja3RhZykubG9ja3RhZ19maWVsZDMgPSAoeGlkKSwgXAorCSAobG9j a3RhZykubG9ja3RhZ19maWVsZDQgPSAob2JqaWQpLCBcCisJIChsb2NrdGFnKS5sb2NrdGFnX3R5 cGUgPSBMT0NLVEFHX0FQUExZX1RSQU5TQUNUSU9OLCBcCisJIChsb2NrdGFnKS5sb2NrdGFnX2xv Y2ttZXRob2RpZCA9IERFRkFVTFRfTE9DS01FVEhPRCkKIAogLyoKICAqIFBlci1sb2NrZWQtb2Jq ZWN0IGxvY2sgaW5mb3JtYXRpb246CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3By b2NzaWduYWwuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY3NpZ25hbC5oCmluZGV4IDQ1ZTJm MWZlOWQuLjkwNWFmMjIzMWIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY3Np Z25hbC5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY3NpZ25hbC5oCkBAIC0zNSw2ICsz NSw3IEBAIHR5cGVkZWYgZW51bQogCVBST0NTSUdfV0FMU05EX0lOSVRfU1RPUFBJTkcsCS8qIGFz ayB3YWxzZW5kZXJzIHRvIHByZXBhcmUgZm9yIHNodXRkb3duICAqLwogCVBST0NTSUdfQkFSUklF UiwJCQkvKiBnbG9iYWwgYmFycmllciBpbnRlcnJ1cHQgICovCiAJUFJPQ1NJR19MT0dfTUVNT1JZ X0NPTlRFWFQsIC8qIGFzayBiYWNrZW5kIHRvIGxvZyB0aGUgbWVtb3J5IGNvbnRleHRzICovCisJ UFJPQ1NJR19QQVJBTExFTF9BUFBMWV9NRVNTQUdFLCAvKiBNZXNzYWdlIGZyb20gcGFyYWxsZWwg YXBwbHkgd29ya2VycyAqLwogCiAJLyogUmVjb3ZlcnkgY29uZmxpY3QgcmVhc29ucyAqLwogCVBS T0NTSUdfUkVDT1ZFUllfQ09ORkxJQ1RfREFUQUJBU0UsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS91dGlscy93YWl0X2V2ZW50LmggYi9zcmMvaW5jbHVkZS91dGlscy93YWl0X2V2ZW50LmgKaW5k ZXggZjUzMjU0YWQxZi4uNmNhY2Q2ZWRhZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMv d2FpdF9ldmVudC5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL3dhaXRfZXZlbnQuaApAQCAtNDIs NiArNDIsNyBAQCB0eXBlZGVmIGVudW0KIAlXQUlUX0VWRU5UX0NIRUNLUE9JTlRFUl9NQUlOLAog CVdBSVRfRVZFTlRfTE9HSUNBTF9BUFBMWV9NQUlOLAogCVdBSVRfRVZFTlRfTE9HSUNBTF9MQVVO Q0hFUl9NQUlOLAorCVdBSVRfRVZFTlRfTE9HSUNBTF9QQVJBTExFTF9BUFBMWV9NQUlOLAogCVdB SVRfRVZFTlRfUkVDT1ZFUllfV0FMX1NUUkVBTSwKIAlXQUlUX0VWRU5UX1NZU0xPR0dFUl9NQUlO LAogCVdBSVRfRVZFTlRfV0FMX1JFQ0VJVkVSX01BSU4sCkBAIC0xMDUsNiArMTA2LDcgQEAgdHlw ZWRlZiBlbnVtCiAJV0FJVF9FVkVOVF9IQVNIX0dST1dfQlVDS0VUU19BTExPQ0FURSwKIAlXQUlU X0VWRU5UX0hBU0hfR1JPV19CVUNLRVRTX0VMRUNULAogCVdBSVRfRVZFTlRfSEFTSF9HUk9XX0JV Q0tFVFNfUkVJTlNFUlQsCisJV0FJVF9FVkVOVF9MT0dJQ0FMX1BBUkFMTEVMX0FQUExZX1NUQVRF X0NIQU5HRSwKIAlXQUlUX0VWRU5UX0xPR0lDQUxfU1lOQ19EQVRBLAogCVdBSVRfRVZFTlRfTE9H SUNBTF9TWU5DX1NUQVRFX0NIQU5HRSwKIAlXQUlUX0VWRU5UX01RX0lOVEVSTkFMLApkaWZmIC0t Z2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zdWJzY3JpcHRpb24ub3V0IGIvc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9zdWJzY3JpcHRpb24ub3V0CmluZGV4IGMxM2QyMThkY2YuLjFl ZDZmNGMzOWMgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3Vic2NyaXB0 aW9uLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N1YnNjcmlwdGlvbi5vdXQK QEAgLTExNyw3ICsxMTcsNyBAQCBISU5UOiAgVG8gaW5pdGlhdGUgcmVwbGljYXRpb24sIHlvdSBt dXN0IG1hbnVhbGx5IGNyZWF0ZSB0aGUgcmVwbGljYXRpb24gc2xvdCwgZQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHN1YnNjcmlwdGlvbnMKICAgICAgICBOYW1lICAg ICAgIHwgICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEVuYWJsZWQgfCBQdWJsaWNhdGlvbiB8 IEJpbmFyeSB8IFN0cmVhbWluZyB8IFR3by1waGFzZSBjb21taXQgfCBEaXNhYmxlIG9uIGVycm9y IHwgT3JpZ2luIHwgU3luY2hyb25vdXMgY29tbWl0IHwgICAgICAgICAgQ29ubmluZm8gICAgICAg ICAgIHwgU2tpcCBMU04gCiAtLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3Nf dGVzdHN1YjQgfCByZWdyZXNzX3N1YnNjcmlwdGlvbl91c2VyIHwgZiAgICAgICB8IHt0ZXN0cHVi fSAgIHwgZiAgICAgIHwgZiAgICAgICAgIHwgZCAgICAgICAgICAgICAgICB8IGYgICAgICAgICAg ICAgICAgfCBub25lICAgfCBvZmYgICAgICAgICAgICAgICAgfCBkYm5hbWU9cmVncmVzc19kb2Vz bm90ZXhpc3QgfCAwLzAKKyByZWdyZXNzX3Rlc3RzdWI0IHwgcmVncmVzc19zdWJzY3JpcHRpb25f dXNlciB8IGYgICAgICAgfCB7dGVzdHB1Yn0gICB8IGYgICAgICB8IG9mZiAgICAgICB8IGQgICAg ICAgICAgICAgICAgfCBmICAgICAgICAgICAgICAgIHwgbm9uZSAgIHwgb2ZmICAgICAgICAgICAg ICAgIHwgZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0IHwgMC8wCiAoMSByb3cpCiAKIEFMVEVS IFNVQlNDUklQVElPTiByZWdyZXNzX3Rlc3RzdWI0IFNFVCAob3JpZ2luID0gYW55KTsKQEAgLTEy NSw3ICsxMjUsNyBAQCBBTFRFUiBTVUJTQ1JJUFRJT04gcmVncmVzc190ZXN0c3ViNCBTRVQgKG9y aWdpbiA9IGFueSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2Ygc3Vi c2NyaXB0aW9ucwogICAgICAgIE5hbWUgICAgICAgfCAgICAgICAgICAgT3duZXIgICAgICAgICAg IHwgRW5hYmxlZCB8IFB1YmxpY2F0aW9uIHwgQmluYXJ5IHwgU3RyZWFtaW5nIHwgVHdvLXBoYXNl IGNvbW1pdCB8IERpc2FibGUgb24gZXJyb3IgfCBPcmlnaW4gfCBTeW5jaHJvbm91cyBjb21taXQg fCAgICAgICAgICBDb25uaW5mbyAgICAgICAgICAgfCBTa2lwIExTTiAKIC0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0r LS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc190ZXN0c3ViNCB8IHJlZ3Jlc3Nfc3Vic2NyaXB0aW9u X3VzZXIgfCBmICAgICAgIHwge3Rlc3RwdWJ9ICAgfCBmICAgICAgfCBmICAgICAgICAgfCBkICAg ICAgICAgICAgICAgIHwgZiAgICAgICAgICAgICAgICB8IGFueSAgICB8IG9mZiAgICAgICAgICAg ICAgICB8IGRibmFtZT1yZWdyZXNzX2RvZXNub3RleGlzdCB8IDAvMAorIHJlZ3Jlc3NfdGVzdHN1 YjQgfCByZWdyZXNzX3N1YnNjcmlwdGlvbl91c2VyIHwgZiAgICAgICB8IHt0ZXN0cHVifSAgIHwg ZiAgICAgIHwgb2ZmICAgICAgIHwgZCAgICAgICAgICAgICAgICB8IGYgICAgICAgICAgICAgICAg fCBhbnkgICAgfCBvZmYgICAgICAgICAgICAgICAgfCBkYm5hbWU9cmVncmVzc19kb2Vzbm90ZXhp c3QgfCAwLzAKICgxIHJvdykKIAogRFJPUCBTVUJTQ1JJUFRJT04gcmVncmVzc190ZXN0c3ViMzsK QEAgLTEzOCw3ICsxMzgsNyBAQCBFUlJPUjogIGludmFsaWQgY29ubmVjdGlvbiBzdHJpbmcgc3lu dGF4OiBtaXNzaW5nICI9IiBhZnRlciAiZm9vYmFyIiBpbiBjb25uZWN0aQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHN1YnNjcmlwdGlvbnMKICAgICAgIE5hbWUgICAg ICAgfCAgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgRW5hYmxlZCB8IFB1YmxpY2F0aW9uIHwg QmluYXJ5IHwgU3RyZWFtaW5nIHwgVHdvLXBoYXNlIGNvbW1pdCB8IERpc2FibGUgb24gZXJyb3Ig fCBPcmlnaW4gfCBTeW5jaHJvbm91cyBjb21taXQgfCAgICAgICAgICBDb25uaW5mbyAgICAgICAg ICAgfCBTa2lwIExTTiAKIC0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3Rl c3RzdWIgfCByZWdyZXNzX3N1YnNjcmlwdGlvbl91c2VyIHwgZiAgICAgICB8IHt0ZXN0cHVifSAg IHwgZiAgICAgIHwgZiAgICAgICAgIHwgZCAgICAgICAgICAgICAgICB8IGYgICAgICAgICAgICAg ICAgfCBhbnkgICAgfCBvZmYgICAgICAgICAgICAgICAgfCBkYm5hbWU9cmVncmVzc19kb2Vzbm90 ZXhpc3QgfCAwLzAKKyByZWdyZXNzX3Rlc3RzdWIgfCByZWdyZXNzX3N1YnNjcmlwdGlvbl91c2Vy IHwgZiAgICAgICB8IHt0ZXN0cHVifSAgIHwgZiAgICAgIHwgb2ZmICAgICAgIHwgZCAgICAgICAg ICAgICAgICB8IGYgICAgICAgICAgICAgICAgfCBhbnkgICAgfCBvZmYgICAgICAgICAgICAgICAg fCBkYm5hbWU9cmVncmVzc19kb2Vzbm90ZXhpc3QgfCAwLzAKICgxIHJvdykKIAogQUxURVIgU1VC U0NSSVBUSU9OIHJlZ3Jlc3NfdGVzdHN1YiBTRVQgUFVCTElDQVRJT04gdGVzdHB1YjIsIHRlc3Rw dWIzIFdJVEggKHJlZnJlc2ggPSBmYWxzZSk7CkBAIC0xNTgsNyArMTU4LDcgQEAgQUxURVIgU1VC U0NSSVBUSU9OIHJlZ3Jlc3NfdGVzdHN1YiBTS0lQIChsc24gPSAnMC8xMjM0NScpOwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBzdWJzY3JpcHRpb25zCiAgICAg ICBOYW1lICAgICAgIHwgICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEVuYWJsZWQgfCAgICAg UHVibGljYXRpb24gICAgIHwgQmluYXJ5IHwgU3RyZWFtaW5nIHwgVHdvLXBoYXNlIGNvbW1pdCB8 IERpc2FibGUgb24gZXJyb3IgfCBPcmlnaW4gfCBTeW5jaHJvbm91cyBjb21taXQgfCAgICAgICAg ICAgQ29ubmluZm8gICAgICAgICAgIHwgU2tpcCBMU04gCiAtLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc190ZXN0c3ViIHwgcmVncmVzc19zdWJzY3JpcHRpb25f dXNlciB8IGYgICAgICAgfCB7dGVzdHB1YjIsdGVzdHB1YjN9IHwgZiAgICAgIHwgZiAgICAgICAg IHwgZCAgICAgICAgICAgICAgICB8IGYgICAgICAgICAgICAgICAgfCBhbnkgICAgfCBvZmYgICAg ICAgICAgICAgICAgfCBkYm5hbWU9cmVncmVzc19kb2Vzbm90ZXhpc3QyIHwgMC8xMjM0NQorIHJl Z3Jlc3NfdGVzdHN1YiB8IHJlZ3Jlc3Nfc3Vic2NyaXB0aW9uX3VzZXIgfCBmICAgICAgIHwge3Rl c3RwdWIyLHRlc3RwdWIzfSB8IGYgICAgICB8IG9mZiAgICAgICB8IGQgICAgICAgICAgICAgICAg fCBmICAgICAgICAgICAgICAgIHwgYW55ICAgIHwgb2ZmICAgICAgICAgICAgICAgIHwgZGJuYW1l PXJlZ3Jlc3NfZG9lc25vdGV4aXN0MiB8IDAvMTIzNDUKICgxIHJvdykKIAogLS0gb2sgLSB3aXRo IGxzbiA9IE5PTkUKQEAgLTE3MCw3ICsxNzAsNyBAQCBFUlJPUjogIGludmFsaWQgV0FMIGxvY2F0 aW9uIChMU04pOiAwLzAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qg b2Ygc3Vic2NyaXB0aW9ucwogICAgICAgTmFtZSAgICAgICB8ICAgICAgICAgICBPd25lciAgICAg ICAgICAgfCBFbmFibGVkIHwgICAgIFB1YmxpY2F0aW9uICAgICB8IEJpbmFyeSB8IFN0cmVhbWlu ZyB8IFR3by1waGFzZSBjb21taXQgfCBEaXNhYmxlIG9uIGVycm9yIHwgT3JpZ2luIHwgU3luY2hy b25vdXMgY29tbWl0IHwgICAgICAgICAgIENvbm5pbmZvICAgICAgICAgICB8IFNraXAgTFNOIAog LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfdGVzdHN1YiB8 IHJlZ3Jlc3Nfc3Vic2NyaXB0aW9uX3VzZXIgfCBmICAgICAgIHwge3Rlc3RwdWIyLHRlc3RwdWIz fSB8IGYgICAgICB8IGYgICAgICAgICB8IGQgICAgICAgICAgICAgICAgfCBmICAgICAgICAgICAg ICAgIHwgYW55ICAgIHwgb2ZmICAgICAgICAgICAgICAgIHwgZGJuYW1lPXJlZ3Jlc3NfZG9lc25v dGV4aXN0MiB8IDAvMAorIHJlZ3Jlc3NfdGVzdHN1YiB8IHJlZ3Jlc3Nfc3Vic2NyaXB0aW9uX3Vz ZXIgfCBmICAgICAgIHwge3Rlc3RwdWIyLHRlc3RwdWIzfSB8IGYgICAgICB8IG9mZiAgICAgICB8 IGQgICAgICAgICAgICAgICAgfCBmICAgICAgICAgICAgICAgIHwgYW55ICAgIHwgb2ZmICAgICAg ICAgICAgICAgIHwgZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0MiB8IDAvMAogKDEgcm93KQog CiBCRUdJTjsKQEAgLTIwNSw3ICsyMDUsNyBAQCBISU5UOiAgQXZhaWxhYmxlIHZhbHVlczogbG9j YWwsIHJlbW90ZV93cml0ZSwgcmVtb3RlX2FwcGx5LCBvbiwgb2ZmLgogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHN1YnNjcmlwdGlvbnMKICAgICAgICAgTmFt ZSAgICAgICAgIHwgICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEVuYWJsZWQgfCAgICAgUHVi bGljYXRpb24gICAgIHwgQmluYXJ5IHwgU3RyZWFtaW5nIHwgVHdvLXBoYXNlIGNvbW1pdCB8IERp c2FibGUgb24gZXJyb3IgfCBPcmlnaW4gfCBTeW5jaHJvbm91cyBjb21taXQgfCAgICAgICAgICAg Q29ubmluZm8gICAgICAgICAgIHwgU2tpcCBMU04gCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfdGVzdHN1Yl9mb28gfCByZWdyZXNzX3N1YnNjcmlw dGlvbl91c2VyIHwgZiAgICAgICB8IHt0ZXN0cHViMix0ZXN0cHViM30gfCBmICAgICAgfCBmICAg ICAgICAgfCBkICAgICAgICAgICAgICAgIHwgZiAgICAgICAgICAgICAgICB8IGFueSAgICB8IGxv Y2FsICAgICAgICAgICAgICB8IGRibmFtZT1yZWdyZXNzX2RvZXNub3RleGlzdDIgfCAwLzAKKyBy ZWdyZXNzX3Rlc3RzdWJfZm9vIHwgcmVncmVzc19zdWJzY3JpcHRpb25fdXNlciB8IGYgICAgICAg fCB7dGVzdHB1YjIsdGVzdHB1YjN9IHwgZiAgICAgIHwgb2ZmICAgICAgIHwgZCAgICAgICAgICAg ICAgICB8IGYgICAgICAgICAgICAgICAgfCBhbnkgICAgfCBsb2NhbCAgICAgICAgICAgICAgfCBk Ym5hbWU9cmVncmVzc19kb2Vzbm90ZXhpc3QyIHwgMC8wCiAoMSByb3cpCiAKIC0tIHJlbmFtZSBi YWNrIHRvIGtlZXAgdGhlIHJlc3Qgc2ltcGxlCkBAIC0yNDIsNyArMjQyLDcgQEAgSElOVDogIFRv IGluaXRpYXRlIHJlcGxpY2F0aW9uLCB5b3UgbXVzdCBtYW51YWxseSBjcmVhdGUgdGhlIHJlcGxp Y2F0aW9uIHNsb3QsIGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBz dWJzY3JpcHRpb25zCiAgICAgICBOYW1lICAgICAgIHwgICAgICAgICAgIE93bmVyICAgICAgICAg ICB8IEVuYWJsZWQgfCBQdWJsaWNhdGlvbiB8IEJpbmFyeSB8IFN0cmVhbWluZyB8IFR3by1waGFz ZSBjb21taXQgfCBEaXNhYmxlIG9uIGVycm9yIHwgT3JpZ2luIHwgU3luY2hyb25vdXMgY29tbWl0 IHwgICAgICAgICAgQ29ubmluZm8gICAgICAgICAgIHwgU2tpcCBMU04gCiAtLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0r LS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc190ZXN0c3ViIHwgcmVncmVzc19zdWJzY3JpcHRpb25f dXNlciB8IGYgICAgICAgfCB7dGVzdHB1Yn0gICB8IHQgICAgICB8IGYgICAgICAgICB8IGQgICAg ICAgICAgICAgICAgfCBmICAgICAgICAgICAgICAgIHwgYW55ICAgIHwgb2ZmICAgICAgICAgICAg ICAgIHwgZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0IHwgMC8wCisgcmVncmVzc190ZXN0c3Vi IHwgcmVncmVzc19zdWJzY3JpcHRpb25fdXNlciB8IGYgICAgICAgfCB7dGVzdHB1Yn0gICB8IHQg ICAgICB8IG9mZiAgICAgICB8IGQgICAgICAgICAgICAgICAgfCBmICAgICAgICAgICAgICAgIHwg YW55ICAgIHwgb2ZmICAgICAgICAgICAgICAgIHwgZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0 IHwgMC8wCiAoMSByb3cpCiAKIEFMVEVSIFNVQlNDUklQVElPTiByZWdyZXNzX3Rlc3RzdWIgU0VU IChiaW5hcnkgPSBmYWxzZSk7CkBAIC0yNTEsMTMgKzI1MSwxMyBAQCBBTFRFUiBTVUJTQ1JJUFRJ T04gcmVncmVzc190ZXN0c3ViIFNFVCAoc2xvdF9uYW1lID0gTk9ORSk7CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIExpc3Qgb2Ygc3Vic2NyaXB0aW9ucwogICAgICAgTmFtZSAgICAg ICB8ICAgICAgICAgICBPd25lciAgICAgICAgICAgfCBFbmFibGVkIHwgUHVibGljYXRpb24gfCBC aW5hcnkgfCBTdHJlYW1pbmcgfCBUd28tcGhhc2UgY29tbWl0IHwgRGlzYWJsZSBvbiBlcnJvciB8 IE9yaWdpbiB8IFN5bmNocm9ub3VzIGNvbW1pdCB8ICAgICAgICAgIENvbm5pbmZvICAgICAgICAg ICB8IFNraXAgTFNOIAogLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfdGVz dHN1YiB8IHJlZ3Jlc3Nfc3Vic2NyaXB0aW9uX3VzZXIgfCBmICAgICAgIHwge3Rlc3RwdWJ9ICAg fCBmICAgICAgfCBmICAgICAgICAgfCBkICAgICAgICAgICAgICAgIHwgZiAgICAgICAgICAgICAg ICB8IGFueSAgICB8IG9mZiAgICAgICAgICAgICAgICB8IGRibmFtZT1yZWdyZXNzX2RvZXNub3Rl eGlzdCB8IDAvMAorIHJlZ3Jlc3NfdGVzdHN1YiB8IHJlZ3Jlc3Nfc3Vic2NyaXB0aW9uX3VzZXIg fCBmICAgICAgIHwge3Rlc3RwdWJ9ICAgfCBmICAgICAgfCBvZmYgICAgICAgfCBkICAgICAgICAg ICAgICAgIHwgZiAgICAgICAgICAgICAgICB8IGFueSAgICB8IG9mZiAgICAgICAgICAgICAgICB8 IGRibmFtZT1yZWdyZXNzX2RvZXNub3RleGlzdCB8IDAvMAogKDEgcm93KQogCiBEUk9QIFNVQlND UklQVElPTiByZWdyZXNzX3Rlc3RzdWI7Ci0tLSBmYWlsIC0gc3RyZWFtaW5nIG11c3QgYmUgYm9v bGVhbgorLS0gZmFpbCAtIHN0cmVhbWluZyBtdXN0IGJlIGJvb2xlYW4gb3IgJ3BhcmFsbGVsJwog Q1JFQVRFIFNVQlNDUklQVElPTiByZWdyZXNzX3Rlc3RzdWIgQ09OTkVDVElPTiAnZGJuYW1lPXJl Z3Jlc3NfZG9lc25vdGV4aXN0JyBQVUJMSUNBVElPTiB0ZXN0cHViIFdJVEggKGNvbm5lY3QgPSBm YWxzZSwgc3RyZWFtaW5nID0gZm9vKTsKLUVSUk9SOiAgc3RyZWFtaW5nIHJlcXVpcmVzIGEgQm9v bGVhbiB2YWx1ZQorRVJST1I6ICBzdHJlYW1pbmcgcmVxdWlyZXMgYSBCb29sZWFuIHZhbHVlIG9y ICJwYXJhbGxlbCIKIC0tIG5vdyBpdCB3b3JrcwogQ1JFQVRFIFNVQlNDUklQVElPTiByZWdyZXNz X3Rlc3RzdWIgQ09OTkVDVElPTiAnZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0JyBQVUJMSUNB VElPTiB0ZXN0cHViIFdJVEggKGNvbm5lY3QgPSBmYWxzZSwgc3RyZWFtaW5nID0gdHJ1ZSk7CiBX QVJOSU5HOiAgc3Vic2NyaXB0aW9uIHdhcyBjcmVhdGVkLCBidXQgaXMgbm90IGNvbm5lY3RlZApA QCAtMjY2LDcgKzI2NiwxNSBAQCBISU5UOiAgVG8gaW5pdGlhdGUgcmVwbGljYXRpb24sIHlvdSBt dXN0IG1hbnVhbGx5IGNyZWF0ZSB0aGUgcmVwbGljYXRpb24gc2xvdCwgZQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHN1YnNjcmlwdGlvbnMKICAgICAgIE5hbWUgICAg ICAgfCAgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgRW5hYmxlZCB8IFB1YmxpY2F0aW9uIHwg QmluYXJ5IHwgU3RyZWFtaW5nIHwgVHdvLXBoYXNlIGNvbW1pdCB8IERpc2FibGUgb24gZXJyb3Ig fCBPcmlnaW4gfCBTeW5jaHJvbm91cyBjb21taXQgfCAgICAgICAgICBDb25uaW5mbyAgICAgICAg ICAgfCBTa2lwIExTTiAKIC0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3Rl c3RzdWIgfCByZWdyZXNzX3N1YnNjcmlwdGlvbl91c2VyIHwgZiAgICAgICB8IHt0ZXN0cHVifSAg IHwgZiAgICAgIHwgdCAgICAgICAgIHwgZCAgICAgICAgICAgICAgICB8IGYgICAgICAgICAgICAg ICAgfCBhbnkgICAgfCBvZmYgICAgICAgICAgICAgICAgfCBkYm5hbWU9cmVncmVzc19kb2Vzbm90 ZXhpc3QgfCAwLzAKKyByZWdyZXNzX3Rlc3RzdWIgfCByZWdyZXNzX3N1YnNjcmlwdGlvbl91c2Vy IHwgZiAgICAgICB8IHt0ZXN0cHVifSAgIHwgZiAgICAgIHwgb24gICAgICAgIHwgZCAgICAgICAg ICAgICAgICB8IGYgICAgICAgICAgICAgICAgfCBhbnkgICAgfCBvZmYgICAgICAgICAgICAgICAg fCBkYm5hbWU9cmVncmVzc19kb2Vzbm90ZXhpc3QgfCAwLzAKKygxIHJvdykKKworQUxURVIgU1VC U0NSSVBUSU9OIHJlZ3Jlc3NfdGVzdHN1YiBTRVQgKHN0cmVhbWluZyA9IHBhcmFsbGVsKTsKK1xk UnMrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2Ygc3Vic2NyaXB0aW9u cworICAgICAgTmFtZSAgICAgICB8ICAgICAgICAgICBPd25lciAgICAgICAgICAgfCBFbmFibGVk IHwgUHVibGljYXRpb24gfCBCaW5hcnkgfCBTdHJlYW1pbmcgfCBUd28tcGhhc2UgY29tbWl0IHwg RGlzYWJsZSBvbiBlcnJvciB8IE9yaWdpbiB8IFN5bmNocm9ub3VzIGNvbW1pdCB8ICAgICAgICAg IENvbm5pbmZvICAgICAgICAgICB8IFNraXAgTFNOIAorLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLQorIHJlZ3Jlc3NfdGVzdHN1YiB8IHJlZ3Jlc3Nfc3Vic2NyaXB0aW9uX3VzZXIgfCBmICAg ICAgIHwge3Rlc3RwdWJ9ICAgfCBmICAgICAgfCBwYXJhbGxlbCAgfCBkICAgICAgICAgICAgICAg IHwgZiAgICAgICAgICAgICAgICB8IGFueSAgICB8IG9mZiAgICAgICAgICAgICAgICB8IGRibmFt ZT1yZWdyZXNzX2RvZXNub3RleGlzdCB8IDAvMAogKDEgcm93KQogCiBBTFRFUiBTVUJTQ1JJUFRJ T04gcmVncmVzc190ZXN0c3ViIFNFVCAoc3RyZWFtaW5nID0gZmFsc2UpOwpAQCAtMjc1LDcgKzI4 Myw3IEBAIEFMVEVSIFNVQlNDUklQVElPTiByZWdyZXNzX3Rlc3RzdWIgU0VUIChzbG90X25hbWUg PSBOT05FKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBzdWJzY3Jp cHRpb25zCiAgICAgICBOYW1lICAgICAgIHwgICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEVu YWJsZWQgfCBQdWJsaWNhdGlvbiB8IEJpbmFyeSB8IFN0cmVhbWluZyB8IFR3by1waGFzZSBjb21t aXQgfCBEaXNhYmxlIG9uIGVycm9yIHwgT3JpZ2luIHwgU3luY2hyb25vdXMgY29tbWl0IHwgICAg ICAgICAgQ29ubmluZm8gICAgICAgICAgIHwgU2tpcCBMU04gCiAtLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0t LS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tCi0gcmVncmVzc190ZXN0c3ViIHwgcmVncmVzc19zdWJzY3JpcHRpb25fdXNlciB8 IGYgICAgICAgfCB7dGVzdHB1Yn0gICB8IGYgICAgICB8IGYgICAgICAgICB8IGQgICAgICAgICAg ICAgICAgfCBmICAgICAgICAgICAgICAgIHwgYW55ICAgIHwgb2ZmICAgICAgICAgICAgICAgIHwg ZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0IHwgMC8wCisgcmVncmVzc190ZXN0c3ViIHwgcmVn cmVzc19zdWJzY3JpcHRpb25fdXNlciB8IGYgICAgICAgfCB7dGVzdHB1Yn0gICB8IGYgICAgICB8 IG9mZiAgICAgICB8IGQgICAgICAgICAgICAgICAgfCBmICAgICAgICAgICAgICAgIHwgYW55ICAg IHwgb2ZmICAgICAgICAgICAgICAgIHwgZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0IHwgMC8w CiAoMSByb3cpCiAKIC0tIGZhaWwgLSBwdWJsaWNhdGlvbiBhbHJlYWR5IGV4aXN0cwpAQCAtMjkz LDcgKzMwMSw3IEBAIEVSUk9SOiAgcHVibGljYXRpb24gInRlc3RwdWIxIiBpcyBhbHJlYWR5IGlu IHN1YnNjcmlwdGlvbiAicmVncmVzc190ZXN0c3ViIgogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIExpc3Qgb2Ygc3Vic2NyaXB0aW9ucwogICAgICAgTmFtZSAgICAgICB8 ICAgICAgICAgICBPd25lciAgICAgICAgICAgfCBFbmFibGVkIHwgICAgICAgICBQdWJsaWNhdGlv biAgICAgICAgIHwgQmluYXJ5IHwgU3RyZWFtaW5nIHwgVHdvLXBoYXNlIGNvbW1pdCB8IERpc2Fi bGUgb24gZXJyb3IgfCBPcmlnaW4gfCBTeW5jaHJvbm91cyBjb21taXQgfCAgICAgICAgICBDb25u aW5mbyAgICAgICAgICAgfCBTa2lwIExTTiAKIC0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc190ZXN0c3ViIHwgcmVncmVzc19zdWJzY3JpcHRpb25f dXNlciB8IGYgICAgICAgfCB7dGVzdHB1Yix0ZXN0cHViMSx0ZXN0cHViMn0gfCBmICAgICAgfCBm ICAgICAgICAgfCBkICAgICAgICAgICAgICAgIHwgZiAgICAgICAgICAgICAgICB8IGFueSAgICB8 IG9mZiAgICAgICAgICAgICAgICB8IGRibmFtZT1yZWdyZXNzX2RvZXNub3RleGlzdCB8IDAvMAor IHJlZ3Jlc3NfdGVzdHN1YiB8IHJlZ3Jlc3Nfc3Vic2NyaXB0aW9uX3VzZXIgfCBmICAgICAgIHwg e3Rlc3RwdWIsdGVzdHB1YjEsdGVzdHB1YjJ9IHwgZiAgICAgIHwgb2ZmICAgICAgIHwgZCAgICAg ICAgICAgICAgICB8IGYgICAgICAgICAgICAgICAgfCBhbnkgICAgfCBvZmYgICAgICAgICAgICAg ICAgfCBkYm5hbWU9cmVncmVzc19kb2Vzbm90ZXhpc3QgfCAwLzAKICgxIHJvdykKIAogLS0gZmFp bCAtIHB1YmxpY2F0aW9uIHVzZWQgbW9yZSB0aGVuIG9uY2UKQEAgLTMxMSw3ICszMTksNyBAQCBB TFRFUiBTVUJTQ1JJUFRJT04gcmVncmVzc190ZXN0c3ViIERST1AgUFVCTElDQVRJT04gdGVzdHB1 YjEsIHRlc3RwdWIyIFdJVEggKHJlZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBM aXN0IG9mIHN1YnNjcmlwdGlvbnMKICAgICAgIE5hbWUgICAgICAgfCAgICAgICAgICAgT3duZXIg ICAgICAgICAgIHwgRW5hYmxlZCB8IFB1YmxpY2F0aW9uIHwgQmluYXJ5IHwgU3RyZWFtaW5nIHwg VHdvLXBoYXNlIGNvbW1pdCB8IERpc2FibGUgb24gZXJyb3IgfCBPcmlnaW4gfCBTeW5jaHJvbm91 cyBjb21taXQgfCAgICAgICAgICBDb25uaW5mbyAgICAgICAgICAgfCBTa2lwIExTTiAKIC0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3Rlc3RzdWIgfCByZWdyZXNzX3N1YnNj cmlwdGlvbl91c2VyIHwgZiAgICAgICB8IHt0ZXN0cHVifSAgIHwgZiAgICAgIHwgZiAgICAgICAg IHwgZCAgICAgICAgICAgICAgICB8IGYgICAgICAgICAgICAgICAgfCBhbnkgICAgfCBvZmYgICAg ICAgICAgICAgICAgfCBkYm5hbWU9cmVncmVzc19kb2Vzbm90ZXhpc3QgfCAwLzAKKyByZWdyZXNz X3Rlc3RzdWIgfCByZWdyZXNzX3N1YnNjcmlwdGlvbl91c2VyIHwgZiAgICAgICB8IHt0ZXN0cHVi fSAgIHwgZiAgICAgIHwgb2ZmICAgICAgIHwgZCAgICAgICAgICAgICAgICB8IGYgICAgICAgICAg ICAgICAgfCBhbnkgICAgfCBvZmYgICAgICAgICAgICAgICAgfCBkYm5hbWU9cmVncmVzc19kb2Vz bm90ZXhpc3QgfCAwLzAKICgxIHJvdykKIAogRFJPUCBTVUJTQ1JJUFRJT04gcmVncmVzc190ZXN0 c3ViOwpAQCAtMzUwLDcgKzM1OCw3IEBAIEhJTlQ6ICBUbyBpbml0aWF0ZSByZXBsaWNhdGlvbiwg eW91IG11c3QgbWFudWFsbHkgY3JlYXRlIHRoZSByZXBsaWNhdGlvbiBzbG90LCBlCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2Ygc3Vic2NyaXB0aW9ucwogICAgICAgTmFt ZSAgICAgICB8ICAgICAgICAgICBPd25lciAgICAgICAgICAgfCBFbmFibGVkIHwgUHVibGljYXRp b24gfCBCaW5hcnkgfCBTdHJlYW1pbmcgfCBUd28tcGhhc2UgY29tbWl0IHwgRGlzYWJsZSBvbiBl cnJvciB8IE9yaWdpbiB8IFN5bmNocm9ub3VzIGNvbW1pdCB8ICAgICAgICAgIENvbm5pbmZvICAg ICAgICAgICB8IFNraXAgTFNOIAogLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jl c3NfdGVzdHN1YiB8IHJlZ3Jlc3Nfc3Vic2NyaXB0aW9uX3VzZXIgfCBmICAgICAgIHwge3Rlc3Rw dWJ9ICAgfCBmICAgICAgfCBmICAgICAgICAgfCBwICAgICAgICAgICAgICAgIHwgZiAgICAgICAg ICAgICAgICB8IGFueSAgICB8IG9mZiAgICAgICAgICAgICAgICB8IGRibmFtZT1yZWdyZXNzX2Rv ZXNub3RleGlzdCB8IDAvMAorIHJlZ3Jlc3NfdGVzdHN1YiB8IHJlZ3Jlc3Nfc3Vic2NyaXB0aW9u X3VzZXIgfCBmICAgICAgIHwge3Rlc3RwdWJ9ICAgfCBmICAgICAgfCBvZmYgICAgICAgfCBwICAg ICAgICAgICAgICAgIHwgZiAgICAgICAgICAgICAgICB8IGFueSAgICB8IG9mZiAgICAgICAgICAg ICAgICB8IGRibmFtZT1yZWdyZXNzX2RvZXNub3RleGlzdCB8IDAvMAogKDEgcm93KQogCiAtLWZh aWwgLSBhbHRlciBvZiB0d29fcGhhc2Ugb3B0aW9uIG5vdCBzdXBwb3J0ZWQuCkBAIC0zNjIsNyAr MzcwLDcgQEAgQUxURVIgU1VCU0NSSVBUSU9OIHJlZ3Jlc3NfdGVzdHN1YiBTRVQgKHN0cmVhbWlu ZyA9IHRydWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHN1YnNj cmlwdGlvbnMKICAgICAgIE5hbWUgICAgICAgfCAgICAgICAgICAgT3duZXIgICAgICAgICAgIHwg RW5hYmxlZCB8IFB1YmxpY2F0aW9uIHwgQmluYXJ5IHwgU3RyZWFtaW5nIHwgVHdvLXBoYXNlIGNv bW1pdCB8IERpc2FibGUgb24gZXJyb3IgfCBPcmlnaW4gfCBTeW5jaHJvbm91cyBjb21taXQgfCAg ICAgICAgICBDb25uaW5mbyAgICAgICAgICAgfCBTa2lwIExTTiAKIC0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0t LS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0KLSByZWdyZXNzX3Rlc3RzdWIgfCByZWdyZXNzX3N1YnNjcmlwdGlvbl91c2Vy IHwgZiAgICAgICB8IHt0ZXN0cHVifSAgIHwgZiAgICAgIHwgdCAgICAgICAgIHwgcCAgICAgICAg ICAgICAgICB8IGYgICAgICAgICAgICAgICAgfCBhbnkgICAgfCBvZmYgICAgICAgICAgICAgICAg fCBkYm5hbWU9cmVncmVzc19kb2Vzbm90ZXhpc3QgfCAwLzAKKyByZWdyZXNzX3Rlc3RzdWIgfCBy ZWdyZXNzX3N1YnNjcmlwdGlvbl91c2VyIHwgZiAgICAgICB8IHt0ZXN0cHVifSAgIHwgZiAgICAg IHwgb24gICAgICAgIHwgcCAgICAgICAgICAgICAgICB8IGYgICAgICAgICAgICAgICAgfCBhbnkg ICAgfCBvZmYgICAgICAgICAgICAgICAgfCBkYm5hbWU9cmVncmVzc19kb2Vzbm90ZXhpc3QgfCAw LzAKICgxIHJvdykKIAogQUxURVIgU1VCU0NSSVBUSU9OIHJlZ3Jlc3NfdGVzdHN1YiBTRVQgKHNs b3RfbmFtZSA9IE5PTkUpOwpAQCAtMzc1LDcgKzM4Myw3IEBAIEhJTlQ6ICBUbyBpbml0aWF0ZSBy ZXBsaWNhdGlvbiwgeW91IG11c3QgbWFudWFsbHkgY3JlYXRlIHRoZSByZXBsaWNhdGlvbiBzbG90 LCBlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2Ygc3Vic2NyaXB0aW9u cwogICAgICAgTmFtZSAgICAgICB8ICAgICAgICAgICBPd25lciAgICAgICAgICAgfCBFbmFibGVk IHwgUHVibGljYXRpb24gfCBCaW5hcnkgfCBTdHJlYW1pbmcgfCBUd28tcGhhc2UgY29tbWl0IHwg RGlzYWJsZSBvbiBlcnJvciB8IE9yaWdpbiB8IFN5bmNocm9ub3VzIGNvbW1pdCB8ICAgICAgICAg IENvbm5pbmZvICAgICAgICAgICB8IFNraXAgTFNOIAogLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLQotIHJlZ3Jlc3NfdGVzdHN1YiB8IHJlZ3Jlc3Nfc3Vic2NyaXB0aW9uX3VzZXIgfCBmICAg ICAgIHwge3Rlc3RwdWJ9ICAgfCBmICAgICAgfCB0ICAgICAgICAgfCBwICAgICAgICAgICAgICAg IHwgZiAgICAgICAgICAgICAgICB8IGFueSAgICB8IG9mZiAgICAgICAgICAgICAgICB8IGRibmFt ZT1yZWdyZXNzX2RvZXNub3RleGlzdCB8IDAvMAorIHJlZ3Jlc3NfdGVzdHN1YiB8IHJlZ3Jlc3Nf c3Vic2NyaXB0aW9uX3VzZXIgfCBmICAgICAgIHwge3Rlc3RwdWJ9ICAgfCBmICAgICAgfCBvbiAg ICAgICAgfCBwICAgICAgICAgICAgICAgIHwgZiAgICAgICAgICAgICAgICB8IGFueSAgICB8IG9m ZiAgICAgICAgICAgICAgICB8IGRibmFtZT1yZWdyZXNzX2RvZXNub3RleGlzdCB8IDAvMAogKDEg cm93KQogCiBBTFRFUiBTVUJTQ1JJUFRJT04gcmVncmVzc190ZXN0c3ViIFNFVCAoc2xvdF9uYW1l ID0gTk9ORSk7CkBAIC0zOTEsNyArMzk5LDcgQEAgSElOVDogIFRvIGluaXRpYXRlIHJlcGxpY2F0 aW9uLCB5b3UgbXVzdCBtYW51YWxseSBjcmVhdGUgdGhlIHJlcGxpY2F0aW9uIHNsb3QsIGUKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBzdWJzY3JpcHRpb25zCiAgICAg ICBOYW1lICAgICAgIHwgICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEVuYWJsZWQgfCBQdWJs aWNhdGlvbiB8IEJpbmFyeSB8IFN0cmVhbWluZyB8IFR3by1waGFzZSBjb21taXQgfCBEaXNhYmxl IG9uIGVycm9yIHwgT3JpZ2luIHwgU3luY2hyb25vdXMgY29tbWl0IHwgICAgICAgICAgQ29ubmlu Zm8gICAgICAgICAgIHwgU2tpcCBMU04gCiAtLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0g cmVncmVzc190ZXN0c3ViIHwgcmVncmVzc19zdWJzY3JpcHRpb25fdXNlciB8IGYgICAgICAgfCB7 dGVzdHB1Yn0gICB8IGYgICAgICB8IGYgICAgICAgICB8IGQgICAgICAgICAgICAgICAgfCBmICAg ICAgICAgICAgICAgIHwgYW55ICAgIHwgb2ZmICAgICAgICAgICAgICAgIHwgZGJuYW1lPXJlZ3Jl c3NfZG9lc25vdGV4aXN0IHwgMC8wCisgcmVncmVzc190ZXN0c3ViIHwgcmVncmVzc19zdWJzY3Jp cHRpb25fdXNlciB8IGYgICAgICAgfCB7dGVzdHB1Yn0gICB8IGYgICAgICB8IG9mZiAgICAgICB8 IGQgICAgICAgICAgICAgICAgfCBmICAgICAgICAgICAgICAgIHwgYW55ICAgIHwgb2ZmICAgICAg ICAgICAgICAgIHwgZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0IHwgMC8wCiAoMSByb3cpCiAK IEFMVEVSIFNVQlNDUklQVElPTiByZWdyZXNzX3Rlc3RzdWIgU0VUIChkaXNhYmxlX29uX2Vycm9y ID0gdHJ1ZSk7CkBAIC0zOTksNyArNDA3LDcgQEAgQUxURVIgU1VCU0NSSVBUSU9OIHJlZ3Jlc3Nf dGVzdHN1YiBTRVQgKGRpc2FibGVfb25fZXJyb3IgPSB0cnVlKTsKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgTGlzdCBvZiBzdWJzY3JpcHRpb25zCiAgICAgICBOYW1lICAgICAgIHwg ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEVuYWJsZWQgfCBQdWJsaWNhdGlvbiB8IEJpbmFy eSB8IFN0cmVhbWluZyB8IFR3by1waGFzZSBjb21taXQgfCBEaXNhYmxlIG9uIGVycm9yIHwgT3Jp Z2luIHwgU3luY2hyb25vdXMgY29tbWl0IHwgICAgICAgICAgQ29ubmluZm8gICAgICAgICAgIHwg U2tpcCBMU04gCiAtLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc190ZXN0c3Vi IHwgcmVncmVzc19zdWJzY3JpcHRpb25fdXNlciB8IGYgICAgICAgfCB7dGVzdHB1Yn0gICB8IGYg ICAgICB8IGYgICAgICAgICB8IGQgICAgICAgICAgICAgICAgfCB0ICAgICAgICAgICAgICAgIHwg YW55ICAgIHwgb2ZmICAgICAgICAgICAgICAgIHwgZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0 IHwgMC8wCisgcmVncmVzc190ZXN0c3ViIHwgcmVncmVzc19zdWJzY3JpcHRpb25fdXNlciB8IGYg ICAgICAgfCB7dGVzdHB1Yn0gICB8IGYgICAgICB8IG9mZiAgICAgICB8IGQgICAgICAgICAgICAg ICAgfCB0ICAgICAgICAgICAgICAgIHwgYW55ICAgIHwgb2ZmICAgICAgICAgICAgICAgIHwgZGJu YW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0IHwgMC8wCiAoMSByb3cpCiAKIEFMVEVSIFNVQlNDUklQ VElPTiByZWdyZXNzX3Rlc3RzdWIgU0VUIChzbG90X25hbWUgPSBOT05FKTsKZGlmZiAtLWdpdCBh L3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3N1YnNjcmlwdGlvbi5zcWwgYi9zcmMvdGVzdC9yZWdyZXNz L3NxbC9zdWJzY3JpcHRpb24uc3FsCmluZGV4IGVhZWFkZThjY2UuLjc5OTFhYmZlOGYgMTAwNjQ0 Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3N1YnNjcmlwdGlvbi5zcWwKKysrIGIvc3JjL3Rl c3QvcmVncmVzcy9zcWwvc3Vic2NyaXB0aW9uLnNxbApAQCAtMTY3LDcgKzE2Nyw3IEBAIEFMVEVS IFNVQlNDUklQVElPTiByZWdyZXNzX3Rlc3RzdWIgU0VUIChzbG90X25hbWUgPSBOT05FKTsKIAog RFJPUCBTVUJTQ1JJUFRJT04gcmVncmVzc190ZXN0c3ViOwogCi0tLSBmYWlsIC0gc3RyZWFtaW5n IG11c3QgYmUgYm9vbGVhbgorLS0gZmFpbCAtIHN0cmVhbWluZyBtdXN0IGJlIGJvb2xlYW4gb3Ig J3BhcmFsbGVsJwogQ1JFQVRFIFNVQlNDUklQVElPTiByZWdyZXNzX3Rlc3RzdWIgQ09OTkVDVElP TiAnZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0JyBQVUJMSUNBVElPTiB0ZXN0cHViIFdJVEgg KGNvbm5lY3QgPSBmYWxzZSwgc3RyZWFtaW5nID0gZm9vKTsKIAogLS0gbm93IGl0IHdvcmtzCkBA IC0xNzUsNiArMTc1LDEwIEBAIENSRUFURSBTVUJTQ1JJUFRJT04gcmVncmVzc190ZXN0c3ViIENP Tk5FQ1RJT04gJ2RibmFtZT1yZWdyZXNzX2RvZXNub3RleGlzdCcgUFVCCiAKIFxkUnMrCiAKK0FM VEVSIFNVQlNDUklQVElPTiByZWdyZXNzX3Rlc3RzdWIgU0VUIChzdHJlYW1pbmcgPSBwYXJhbGxl bCk7CisKK1xkUnMrCisKIEFMVEVSIFNVQlNDUklQVElPTiByZWdyZXNzX3Rlc3RzdWIgU0VUIChz dHJlYW1pbmcgPSBmYWxzZSk7CiBBTFRFUiBTVUJTQ1JJUFRJT04gcmVncmVzc190ZXN0c3ViIFNF VCAoc2xvdF9uYW1lID0gTk9ORSk7CiAKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3N1YnNjcmlwdGlv bi90LzAxNV9zdHJlYW0ucGwgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMTVfc3RyZWFtLnBs CmluZGV4IGUyNTljMTAwZDUuLjkxZThhYThjMGEgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3N1YnNj cmlwdGlvbi90LzAxNV9zdHJlYW0ucGwKKysrIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDE1 X3N0cmVhbS5wbApAQCAtOCw2ICs4LDEyOCBAQCB1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rl cjsKIHVzZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsKIHVzZSBUZXN0OjpNb3JlOwogCisjIENo ZWNrIHRoYXQgdGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlciBoYXMgZmluaXNoZWQgYXBwbHlpbmcg dGhlIHN0cmVhbWluZworIyB0cmFuc2FjdGlvbi4KK3N1YiBjaGVja19wYXJhbGxlbF9sb2cKK3sK KwlteSAoJG5vZGVfc3Vic2NyaWJlciwgJG9mZnNldCwgJGlzX3BhcmFsbGVsLCAkdHlwZSkgPSBA XzsKKworCWlmICgkaXNfcGFyYWxsZWwpCisJeworCQkkbm9kZV9zdWJzY3JpYmVyLT53YWl0X2Zv cl9sb2coCisJCQlxci9ERUJVRzogKCBbQS1aMC05XSs6KT8gZmluaXNoZWQgcHJvY2Vzc2luZyB0 aGUgU1RSRUFNICR0eXBlIGNvbW1hbmQvLAorCQkJJG9mZnNldCk7CisJfQorfQorCisjIENvbW1v biB0ZXN0IHN0ZXBzIGZvciBib3RoIHRoZSBzdHJlYW1pbmc9b24gYW5kIHN0cmVhbWluZz1wYXJh bGxlbCBjYXNlcy4KK3N1YiB0ZXN0X3N0cmVhbWluZworeworCW15ICgkbm9kZV9wdWJsaXNoZXIs ICRub2RlX3N1YnNjcmliZXIsICRhcHBuYW1lLCAkaXNfcGFyYWxsZWwpID0gQF87CisKKwkjIElu dGVybGVhdmUgYSBwYWlyIG9mIHRyYW5zYWN0aW9ucywgZWFjaCBleGNlZWRpbmcgdGhlIDY0a0Ig bGltaXQuCisJbXkgJGluICA9ICcnOworCW15ICRvdXQgPSAnJzsKKworCW15ICRvZmZzZXQgPSAw OworCisJbXkgJHRpbWVyID0gSVBDOjpSdW46OnRpbWVvdXQoJFBvc3RncmVTUUw6OlRlc3Q6OlV0 aWxzOjp0aW1lb3V0X2RlZmF1bHQpOworCisJbXkgJGggPSAkbm9kZV9wdWJsaXNoZXItPmJhY2tn cm91bmRfcHNxbCgncG9zdGdyZXMnLCBcJGluLCBcJG91dCwgJHRpbWVyLAorCQlvbl9lcnJvcl9z dG9wID0+IDApOworCisJIyBDaGVjayB0aGUgc3Vic2NyaWJlciBsb2cgZnJvbSBub3cgb24uCisJ JG9mZnNldCA9IC1zICRub2RlX3N1YnNjcmliZXItPmxvZ2ZpbGU7CisKKwkkaW4gLj0gcXsKKwlC RUdJTjsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00g Z2VuZXJhdGVfc2VyaWVzKDMsIDUwMDApIHMoaSk7CisJVVBEQVRFIHRlc3RfdGFiIFNFVCBiID0g bWQ1KGIpIFdIRVJFIG1vZChhLDIpID0gMDsKKwlERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBt b2QoYSwzKSA9IDA7CisJfTsKKwkkaC0+cHVtcF9uYjsKKworCSRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKAorCQkncG9zdGdyZXMnLCBxeworCUJFR0lOOworCUlOU0VSVCBJTlRPIHRlc3RfdGFi IFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoNTAwMSwgOTk5OSkg cyhpKTsKKwlERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBhID4gNTAwMDsKKwlDT01NSVQ7CisJ fSk7CisKKwkkaW4gLj0gcXsKKwlDT01NSVQ7CisJXHEKKwl9OworCSRoLT5maW5pc2g7ICAgICMg ZXJyb3JzIG1ha2UgdGhlIG5leHQgdGVzdCBmYWlsLCBzbyBpZ25vcmUgdGhlbSBoZXJlCisKKwkk bm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOworCisJY2hlY2tfcGFy YWxsZWxfbG9nKCRub2RlX3N1YnNjcmliZXIsICRvZmZzZXQsICRpc19wYXJhbGxlbCwgJ0NPTU1J VCcpOworCisJbXkgJHJlc3VsdCA9CisJICAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywKKwkJIlNFTEVDVCBjb3VudCgqKSwgY291bnQoYyksIGNvdW50KGQgPSA5OTkpIEZS T00gdGVzdF90YWIiKTsKKwlpcygkcmVzdWx0LCBxcSgzMzM0fDMzMzR8MzMzNCksCisJCSdjaGVj ayBleHRyYSBjb2x1bW5zIGNvbnRhaW4gbG9jYWwgZGVmYXVsdHMnKTsKKworCSMgVGVzdCB0aGUg c3RyZWFtaW5nIGluIGJpbmFyeSBtb2RlCisJJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsCisJCSJBTFRFUiBTVUJTQ1JJUFRJT04gdGFwX3N1YiBTRVQgKGJpbmFyeSA9IG9u KSIpOworCisJIyBDaGVjayB0aGUgc3Vic2NyaWJlciBsb2cgZnJvbSBub3cgb24uCisJJG9mZnNl dCA9IC1zICRub2RlX3N1YnNjcmliZXItPmxvZ2ZpbGU7CisKKwkjIEluc2VydCwgdXBkYXRlIGFu ZCBkZWxldGUgZW5vdWdoIHJvd3MgdG8gZXhjZWVkIHRoZSA2NGtCIGxpbWl0LgorCSRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKAorCQkncG9zdGdyZXMnLCBxeworCUJFR0lOOworCUlOU0VSVCBJ TlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMo NTAwMSwgMTAwMDApIHMoaSk7CisJVVBEQVRFIHRlc3RfdGFiIFNFVCBiID0gbWQ1KGIpIFdIRVJF IG1vZChhLDIpID0gMDsKKwlERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBtb2QoYSwzKSA9IDA7 CisJQ09NTUlUOworCX0pOworCisJJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRh cHBuYW1lKTsKKworCWNoZWNrX3BhcmFsbGVsX2xvZygkbm9kZV9zdWJzY3JpYmVyLCAkb2Zmc2V0 LCAkaXNfcGFyYWxsZWwsICdDT01NSVQnKTsKKworCSRyZXN1bHQgPQorCSAgJG5vZGVfc3Vic2Ny aWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMp LCBjb3VudChkID0gOTk5KSBGUk9NIHRlc3RfdGFiIik7CisJaXMoJHJlc3VsdCwgcXEoNjY2N3w2 NjY3fDY2NjcpLAorCQknY2hlY2sgZXh0cmEgY29sdW1ucyBjb250YWluIGxvY2FsIGRlZmF1bHRz Jyk7CisKKwkjIENoYW5nZSB0aGUgbG9jYWwgdmFsdWVzIG9mIHRoZSBleHRyYSBjb2x1bW5zIG9u IHRoZSBzdWJzY3JpYmVyLAorCSMgdXBkYXRlIHB1Ymxpc2hlciwgYW5kIGNoZWNrIHRoYXQgc3Vi c2NyaWJlciByZXRhaW5zIHRoZSBleHBlY3RlZAorCSMgdmFsdWVzLiBUaGlzIGlzIHRvIGVuc3Vy ZSB0aGF0IG5vbi1zdHJlYW1pbmcgdHJhbnNhY3Rpb25zIGJlaGF2ZQorCSMgcHJvcGVybHkgYWZ0 ZXIgYSBzdHJlYW1pbmcgdHJhbnNhY3Rpb24uCisJJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsCisJCSJVUERBVEUgdGVzdF90YWIgU0VUIGMgPSAnZXBvY2gnOjp0aW1lc3Rh bXB0eiArIDk4NzY1NDMyMSAqIGludGVydmFsICcxcyciCisJKTsKKworCSMgQ2hlY2sgdGhlIHN1 YnNjcmliZXIgbG9nIGZyb20gbm93IG9uLgorCSRvZmZzZXQgPSAtcyAkbm9kZV9zdWJzY3JpYmVy LT5sb2dmaWxlOworCisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJ IlVQREFURSB0ZXN0X3RhYiBTRVQgYiA9IG1kNShhOjp0ZXh0KSIpOworCisJJG5vZGVfcHVibGlz aGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKKworCWNoZWNrX3BhcmFsbGVsX2xvZygk bm9kZV9zdWJzY3JpYmVyLCAkb2Zmc2V0LCAkaXNfcGFyYWxsZWwsICdDT01NSVQnKTsKKworCSRy ZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNFTEVD VCBjb3VudCgqKSwgY291bnQoZXh0cmFjdChlcG9jaCBmcm9tIGMpID0gOTg3NjU0MzIxKSwgY291 bnQoZCA9IDk5OSkgRlJPTSB0ZXN0X3RhYiIKKwkpOworCWlzKCRyZXN1bHQsIHFxKDY2Njd8NjY2 N3w2NjY3KSwKKwkJJ2NoZWNrIGV4dHJhIGNvbHVtbnMgY29udGFpbiBsb2NhbGx5IGNoYW5nZWQg ZGF0YScpOworCisJIyBDbGVhbnVwIHRoZSB0ZXN0IGRhdGEKKwkkbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgKGEgPiAy KSIpOworCSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7Cit9CisK ICMgQ3JlYXRlIHB1Ymxpc2hlciBub2RlCiBteSAkbm9kZV9wdWJsaXNoZXIgPSBQb3N0Z3JlU1FM OjpUZXN0OjpDbHVzdGVyLT5uZXcoJ3B1Ymxpc2hlcicpOwogJG5vZGVfcHVibGlzaGVyLT5pbml0 KGFsbG93c19zdHJlYW1pbmcgPT4gJ2xvZ2ljYWwnKTsKQEAgLTI2LDE3ICsxNDgsMjcgQEAgJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKICRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsCiAJIklOU0VSVCBJTlRPIHRlc3RfdGFiIFZBTFVFUyAoMSwgJ2Zv bycpLCAoMiwgJ2JhcicpIik7CiAKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJDUkVBVEUgVEFCTEUgdGVzdF90YWJfMiAoYSBpbnQpIik7CisKICMgU2V0dXAgc3RydWN0 dXJlIG9uIHN1YnNjcmliZXIKICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LAogCSJDUkVBVEUgVEFCTEUgdGVzdF90YWIgKGEgaW50IHByaW1hcnkga2V5LCBiIHRleHQsIGMg dGltZXN0YW1wdHogREVGQVVMVCBub3coKSwgZCBiaWdpbnQgREVGQVVMVCA5OTkpIgogKTsKIAor JG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdGVz dF90YWJfMiAoYSBpbnQpIik7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywKKwkiQ1JFQVRFIFVOSVFVRSBJTkRFWCBpZHhfdGFiIG9uIHRlc3RfdGFiXzIoYSkiKTsKKwog IyBTZXR1cCBsb2dpY2FsIHJlcGxpY2F0aW9uCiBteSAkcHVibGlzaGVyX2Nvbm5zdHIgPSAkbm9k ZV9wdWJsaXNoZXItPmNvbm5zdHIgLiAnIGRibmFtZT1wb3N0Z3Jlcyc7CiAkbm9kZV9wdWJsaXNo ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJDUkVBVEUgUFVCTElDQVRJT04gdGFwX3B1YiBG T1IgVEFCTEUgdGVzdF90YWIiKTsKKwkiQ1JFQVRFIFBVQkxJQ0FUSU9OIHRhcF9wdWIgRk9SIFRB QkxFIHRlc3RfdGFiLCB0ZXN0X3RhYl8yIik7CiAKIG15ICRhcHBuYW1lID0gJ3RhcF9zdWInOwor CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBUZXN0IHVzaW5nIHN0cmVhbWlu ZyBtb2RlICdvbicKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAkbm9kZV9zdWJz Y3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKIAkiQ1JFQVRFIFNVQlNDUklQVElPTiB0YXBf c3ViIENPTk5FQ1RJT04gJyRwdWJsaXNoZXJfY29ubnN0ciBhcHBsaWNhdGlvbl9uYW1lPSRhcHBu YW1lJyBQVUJMSUNBVElPTiB0YXBfcHViIFdJVEggKHN0cmVhbWluZyA9IG9uKSIKICk7CkBAIC00 OSw2ICsxODEsNDMgQEAgbXkgJHJlc3VsdCA9CiAJIlNFTEVDVCBjb3VudCgqKSwgY291bnQoYyks IGNvdW50KGQgPSA5OTkpIEZST00gdGVzdF90YWIiKTsKIGlzKCRyZXN1bHQsIHFxKDJ8MnwyKSwg J2NoZWNrIGluaXRpYWwgZGF0YSB3YXMgY29waWVkIHRvIHN1YnNjcmliZXInKTsKIAordGVzdF9z dHJlYW1pbmcoJG5vZGVfcHVibGlzaGVyLCAkbm9kZV9zdWJzY3JpYmVyLCAkYXBwbmFtZSwgMCk7 CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFRlc3QgdXNpbmcg c3RyZWFtaW5nIG1vZGUgJ3BhcmFsbGVsJworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMKK215ICRvbGRwaWQgPSAkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLAorCSJTRUxFQ1QgcGlkIEZST00gcGdfc3RhdF9yZXBsaWNhdGlvbiBXSEVSRSBhcHBsaWNh dGlvbl9uYW1lID0gJyRhcHBuYW1lJyBBTkQgc3RhdGUgPSAnc3RyZWFtaW5nJzsiCispOworCisk bm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQUxURVIgU1VCU0NSSVBU SU9OIHRhcF9zdWIgU0VUKHN0cmVhbWluZyA9IHBhcmFsbGVsLCBiaW5hcnkgPSBvZmYpIik7CisK KyRub2RlX3B1Ymxpc2hlci0+cG9sbF9xdWVyeV91bnRpbCgncG9zdGdyZXMnLAorCSJTRUxFQ1Qg cGlkICE9ICRvbGRwaWQgRlJPTSBwZ19zdGF0X3JlcGxpY2F0aW9uIFdIRVJFIGFwcGxpY2F0aW9u X25hbWUgPSAnJGFwcG5hbWUnIEFORCBzdGF0ZSA9ICdzdHJlYW1pbmcnOyIKKyAgKQorICBvciBk aWUKKyAgIlRpbWVkIG91dCB3aGlsZSB3YWl0aW5nIGZvciBhcHBseSB0byByZXN0YXJ0IGFmdGVy IGNoYW5naW5nIFNVQlNDUklQVElPTiI7CisKKyMgV2UgbmVlZCB0byBjaGVjayBERUJVRyBsb2dz IHRvIGVuc3VyZSB0aGF0IHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgaGFzCisjIGFwcGxpZWQg dGhlIHRyYW5zYWN0aW9uLiBTbywgYnVtcCB1cCB0aGUgbG9nIHZlcmJvc2l0eS4KKyRub2RlX3N1 YnNjcmliZXItPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLCAibG9nX21pbl9tZXNzYWdl cyA9IGRlYnVnMSIpOworJG5vZGVfc3Vic2NyaWJlci0+cmVsb2FkOworCisjIFJ1biBhIHF1ZXJ5 IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSByZWxvYWQgaGFzIHRha2VuIGVmZmVjdC4KKyRub2RlX3N1 YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxe1NFTEVDVCAxfSk7CisKK3Rlc3Rfc3Ry ZWFtaW5nKCRub2RlX3B1Ymxpc2hlciwgJG5vZGVfc3Vic2NyaWJlciwgJGFwcG5hbWUsIDEpOwor CisjIFRlc3QgdGhhdCB0aGUgZGVhZGxvY2sgaXMgZGV0ZWN0ZWQgYW1vbmcgdGhlIGxlYWRlciBh bmQgcGFyYWxsZWwgYXBwbHkKKyMgd29ya2Vycy4KKworJG5vZGVfc3Vic2NyaWJlci0+YXBwZW5k X2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsICJkZWFkbG9ja190aW1lb3V0ID0gMTBtcyIpOworJG5v ZGVfc3Vic2NyaWJlci0+cmVsb2FkOworCisjIFJ1biBhIHF1ZXJ5IHRvIG1ha2Ugc3VyZSB0aGF0 IHRoZSByZWxvYWQgaGFzIHRha2VuIGVmZmVjdC4KKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCBxe1NFTEVDVCAxfSk7CisKICMgSW50ZXJsZWF2ZSBhIHBhaXIgb2YgdHJh bnNhY3Rpb25zLCBlYWNoIGV4Y2VlZGluZyB0aGUgNjRrQiBsaW1pdC4KIG15ICRpbiAgPSAnJzsK IG15ICRvdXQgPSAnJzsKQEAgLTU4LDczICsyMjcsOTAgQEAgbXkgJHRpbWVyID0gSVBDOjpSdW46 OnRpbWVvdXQoJFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOjp0aW1lb3V0X2RlZmF1bHQpOwogbXkg JGggPSAkbm9kZV9wdWJsaXNoZXItPmJhY2tncm91bmRfcHNxbCgncG9zdGdyZXMnLCBcJGluLCBc JG91dCwgJHRpbWVyLAogCW9uX2Vycm9yX3N0b3AgPT4gMCk7CiAKKyMgQ29uZmlybSBpZiBhIGRl YWRsb2NrIGJldHdlZW4gdGhlIGxlYWRlciBhcHBseSB3b3JrZXIgYW5kIHRoZSBwYXJhbGxlbCBh cHBseQorIyB3b3JrZXIgY2FuIGJlIGRldGVjdGVkLgorCitteSAkb2Zmc2V0ID0gLXMgJG5vZGVf c3Vic2NyaWJlci0+bG9nZmlsZTsKKwogJGluIC49IHF7CiBCRUdJTjsKLUlOU0VSVCBJTlRPIHRl c3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMywgNTAw MCkgcyhpKTsKLVVQREFURSB0ZXN0X3RhYiBTRVQgYiA9IG1kNShiKSBXSEVSRSBtb2QoYSwyKSA9 IDA7Ci1ERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBtb2QoYSwzKSA9IDA7CitJTlNFUlQgSU5U TyB0ZXN0X3RhYl8yIFNFTEVDVCBpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDUwMDApIHMoaSk7 CiB9OwogJGgtPnB1bXBfbmI7CiAKLSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAotCSdwb3N0 Z3JlcycsIHF7Ci1CRUdJTjsKLUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6 dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoNTAwMSwgOTk5OSkgcyhpKTsKLURFTEVURSBGUk9N IHRlc3RfdGFiIFdIRVJFIGEgPiA1MDAwOwotQ09NTUlUOwotfSk7CisjIEVuc3VyZSB0aGF0IHRo ZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgZXhlY3V0ZXMgdGhlIGluc2VydCBjb21tYW5kIGJlZm9y ZSB0aGUKKyMgbGVhZGVyIHdvcmtlci4KKyRub2RlX3N1YnNjcmliZXItPndhaXRfZm9yX2xvZygK Kwlxci9ERUJVRzogKCBbQS1aMC05XSs6KT8gYXBwbGllZCBbMC05XSsgY2hhbmdlcyBpbiB0aGUg c3RyZWFtaW5nIGNodW5rLywKKwkkb2Zmc2V0KTsKKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRlc3RfdGFiXzIgdmFsdWVzKDEpIik7CiAKICRp biAuPSBxewogQ09NTUlUOwogXHEKIH07Ci0kaC0+ZmluaXNoOyAgICAjIGVycm9ycyBtYWtlIHRo ZSBuZXh0IHRlc3QgZmFpbCwgc28gaWdub3JlIHRoZW0gaGVyZQorJGgtPmZpbmlzaDsKIAorJG5v ZGVfc3Vic2NyaWJlci0+d2FpdF9mb3JfbG9nKHFyL0VSUk9SOiAoIFtBLVowLTldKzopPyBkZWFk bG9jayBkZXRlY3RlZC8sCisJJG9mZnNldCk7CisKKyMgSW4gb3JkZXIgZm9yIHRoZSB0d28gdHJh bnNhY3Rpb25zIHRvIGJlIGNvbXBsZXRlZCBub3JtYWxseSB3aXRob3V0IGNhdXNpbmcKKyMgY29u ZmxpY3RzIGR1ZSB0byB0aGUgdW5pcXVlIGluZGV4LCB3ZSB0ZW1wb3JhcmlseSBkcm9wIGl0Lgor JG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIElOREVYIGlkeF90 YWIiKTsKKworIyBXYWl0IGZvciB0aGlzIHN0cmVhbWluZyB0cmFuc2FjdGlvbiB0byBiZSBhcHBs aWVkIGluIHRoZSBhcHBseSB3b3JrZXIuCiAkbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNo dXAoJGFwcG5hbWUpOwogCiAkcmVzdWx0ID0KLSAgJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsCi0JIlNFTEVDVCBjb3VudCgqKSwgY291bnQoYyksIGNvdW50KGQgPSA5OTkp IEZST00gdGVzdF90YWIiKTsKLWlzKCRyZXN1bHQsIHFxKDMzMzR8MzMzNHwzMzM0KSwgJ2NoZWNr IGV4dHJhIGNvbHVtbnMgY29udGFpbiBsb2NhbCBkZWZhdWx0cycpOworICAkbm9kZV9zdWJzY3Jp YmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBGUk9NIHRlc3RfdGFi XzIiKTsKK2lzKCRyZXN1bHQsIHFxKDUwMDEpLCAnZGF0YSByZXBsaWNhdGVkIHRvIHN1YnNjcmli ZXIgYWZ0ZXIgZHJvcHBpbmcgaW5kZXgnKTsKIAotIyBUZXN0IHRoZSBzdHJlYW1pbmcgaW4gYmlu YXJ5IG1vZGUKKyMgQ2xlYW4gdXAgdGVzdCBkYXRhIGZyb20gdGhlIGVudmlyb25tZW50LgorJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlRSVU5DQVRFIFRBQkxFIHRlc3Rf dGFiXzIiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7CiAk bm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiQUxURVIgU1VCU0NSSVBU SU9OIHRhcF9zdWIgU0VUIChiaW5hcnkgPSBvbikiKTsKKwkiQ1JFQVRFIFVOSVFVRSBJTkRFWCBp ZHhfdGFiIG9uIHRlc3RfdGFiXzIoYSkiKTsKIAotIyBJbnNlcnQsIHVwZGF0ZSBhbmQgZGVsZXRl IGVub3VnaCByb3dzIHRvIGV4Y2VlZCB0aGUgNjRrQiBsaW1pdC4KLSRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKAotCSdwb3N0Z3JlcycsIHF7Ci1CRUdJTjsKLUlOU0VSVCBJTlRPIHRlc3RfdGFi IFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoNTAwMSwgMTAwMDAp IHMoaSk7Ci1VUERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUgbW9kKGEsMikgPSAw OwotREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgbW9kKGEsMykgPSAwOwotQ09NTUlUOwotfSk7 CisjIENvbmZpcm0gaWYgYSBkZWFkbG9jayBiZXR3ZWVuIHR3byBwYXJhbGxlbCBhcHBseSB3b3Jr ZXJzIGNhbiBiZSBkZXRlY3RlZC4KIAotJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVw KCRhcHBuYW1lKTsKKyMgQ2hlY2sgdGhlIHN1YnNjcmliZXIgbG9nIGZyb20gbm93IG9uLgorJG9m ZnNldCA9IC1zICRub2RlX3N1YnNjcmliZXItPmxvZ2ZpbGU7CiAKLSRyZXN1bHQgPQotICAkbm9k ZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiU0VMRUNUIGNvdW50KCopLCBj b3VudChjKSwgY291bnQoZCA9IDk5OSkgRlJPTSB0ZXN0X3RhYiIpOwotaXMoJHJlc3VsdCwgcXEo NjY2N3w2NjY3fDY2NjcpLCAnY2hlY2sgZXh0cmEgY29sdW1ucyBjb250YWluIGxvY2FsIGRlZmF1 bHRzJyk7CiskaW4gLj0gcXsKK0JFR0lOOworSU5TRVJUIElOVE8gdGVzdF90YWJfMiBTRUxFQ1Qg aSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCA1MDAwKSBzKGkpOworfTsKKyRoLT5wdW1wX25iOwor CisjIEVuc3VyZSB0aGF0IHRoZSBmaXJzdCBwYXJhbGxlbCBhcHBseSB3b3JrZXIgZXhlY3V0ZXMg dGhlIGluc2VydCBjb21tYW5kCisjIGJlZm9yZSB0aGUgc2Vjb25kIG9uZS4KKyRub2RlX3N1YnNj cmliZXItPndhaXRfZm9yX2xvZygKKwlxci9ERUJVRzogKCBbQS1aMC05XSs6KT8gYXBwbGllZCBb MC05XSsgY2hhbmdlcyBpbiB0aGUgc3RyZWFtaW5nIGNodW5rLywKKwkkb2Zmc2V0KTsKIAotIyBD aGFuZ2UgdGhlIGxvY2FsIHZhbHVlcyBvZiB0aGUgZXh0cmEgY29sdW1ucyBvbiB0aGUgc3Vic2Ny aWJlciwKLSMgdXBkYXRlIHB1Ymxpc2hlciwgYW5kIGNoZWNrIHRoYXQgc3Vic2NyaWJlciByZXRh aW5zIHRoZSBleHBlY3RlZAotIyB2YWx1ZXMuIFRoaXMgaXMgdG8gZW5zdXJlIHRoYXQgbm9uLXN0 cmVhbWluZyB0cmFuc2FjdGlvbnMgYmVoYXZlCi0jIHByb3Blcmx5IGFmdGVyIGEgc3RyZWFtaW5n IHRyYW5zYWN0aW9uLgotJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0J IlVQREFURSB0ZXN0X3RhYiBTRVQgYyA9ICdlcG9jaCc6OnRpbWVzdGFtcHR6ICsgOTg3NjU0MzIx ICogaW50ZXJ2YWwgJzFzJyIKLSk7CiAkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLAotCSJVUERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYTo6dGV4dCkiKTsKKwkiSU5TRVJU IElOVE8gdGVzdF90YWJfMiBTRUxFQ1QgaSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCA1MDAwKSBz KGkpIik7CiAKKyRpbiAuPSBxeworQ09NTUlUOworXHEKK307CiskaC0+ZmluaXNoOworCiskbm9k ZV9zdWJzY3JpYmVyLT53YWl0X2Zvcl9sb2cocXIvRVJST1I6ICggW0EtWjAtOV0rOik/IGRlYWRs b2NrIGRldGVjdGVkLywKKwkkb2Zmc2V0KTsKKworIyBJbiBvcmRlciBmb3IgdGhlIHR3byB0cmFu c2FjdGlvbnMgdG8gYmUgY29tcGxldGVkIG5vcm1hbGx5IHdpdGhvdXQgY2F1c2luZworIyBjb25m bGljdHMgZHVlIHRvIHRoZSB1bmlxdWUgaW5kZXgsIHdlIHRlbXBvcmFyaWx5IGRyb3AgaXQuCisk bm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgSU5ERVggaWR4X3Rh YiIpOworCisjIFdhaXQgZm9yIHRoaXMgc3RyZWFtaW5nIHRyYW5zYWN0aW9uIHRvIGJlIGFwcGxp ZWQgaW4gdGhlIGFwcGx5IHdvcmtlci4KICRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1 cCgkYXBwbmFtZSk7CiAKLSRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywKLQkiU0VMRUNUIGNvdW50KCopLCBjb3VudChleHRyYWN0KGVwb2NoIGZyb20gYykg PSA5ODc2NTQzMjEpLCBjb3VudChkID0gOTk5KSBGUk9NIHRlc3RfdGFiIgotKTsKLWlzKCRyZXN1 bHQsIHFxKDY2Njd8NjY2N3w2NjY3KSwKLQknY2hlY2sgZXh0cmEgY29sdW1ucyBjb250YWluIGxv Y2FsbHkgY2hhbmdlZCBkYXRhJyk7CiskcmVzdWx0ID0KKyAgJG5vZGVfc3Vic2NyaWJlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0X3RhYl8yIik7Citp cygkcmVzdWx0LCBxcSgxMDAwMCksICdkYXRhIHJlcGxpY2F0ZWQgdG8gc3Vic2NyaWJlciBhZnRl ciBkcm9wcGluZyBpbmRleCcpOwogCiAkbm9kZV9zdWJzY3JpYmVyLT5zdG9wOwogJG5vZGVfcHVi bGlzaGVyLT5zdG9wOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDE2X3N0 cmVhbV9zdWJ4YWN0LnBsIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDE2X3N0cmVhbV9zdWJ4 YWN0LnBsCmluZGV4IDY0OWRkOTVmN2EuLjJmMDE0OGMzYTggMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0 L3N1YnNjcmlwdGlvbi90LzAxNl9zdHJlYW1fc3VieGFjdC5wbAorKysgYi9zcmMvdGVzdC9zdWJz Y3JpcHRpb24vdC8wMTZfc3RyZWFtX3N1YnhhY3QucGwKQEAgLTgsNiArOCw3MyBAQCB1c2UgUG9z dGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKIHVzZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsKIHVz ZSBUZXN0OjpNb3JlOwogCisjIENoZWNrIHRoYXQgdGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlciBo YXMgZmluaXNoZWQgYXBwbHlpbmcgdGhlIHN0cmVhbWluZworIyB0cmFuc2FjdGlvbi4KK3N1YiBj aGVja19wYXJhbGxlbF9sb2cKK3sKKwlteSAoJG5vZGVfc3Vic2NyaWJlciwgJG9mZnNldCwgJGlz X3BhcmFsbGVsLCAkdHlwZSkgPSBAXzsKKworCWlmICgkaXNfcGFyYWxsZWwpCisJeworCQkkbm9k ZV9zdWJzY3JpYmVyLT53YWl0X2Zvcl9sb2coCisJCQlxci9ERUJVRzogKCBbQS1aMC05XSs6KT8g ZmluaXNoZWQgcHJvY2Vzc2luZyB0aGUgU1RSRUFNICR0eXBlIGNvbW1hbmQvLAorCQkJJG9mZnNl dCk7CisJfQorfQorCisjIENvbW1vbiB0ZXN0IHN0ZXBzIGZvciBib3RoIHRoZSBzdHJlYW1pbmc9 b24gYW5kIHN0cmVhbWluZz1wYXJhbGxlbCBjYXNlcy4KK3N1YiB0ZXN0X3N0cmVhbWluZworewor CW15ICgkbm9kZV9wdWJsaXNoZXIsICRub2RlX3N1YnNjcmliZXIsICRhcHBuYW1lLCAkaXNfcGFy YWxsZWwpID0gQF87CisKKwlteSAkb2Zmc2V0ID0gMDsKKworCSMgQ2hlY2sgdGhlIHN1YnNjcmli ZXIgbG9nIGZyb20gbm93IG9uLgorCSRvZmZzZXQgPSAtcyAkbm9kZV9zdWJzY3JpYmVyLT5sb2dm aWxlOworCisJIyBJbnNlcnQsIHVwZGF0ZSBhbmQgZGVsZXRlIHNvbWUgcm93cy4KKwkkbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgKKwkJJ3Bvc3RncmVzJywgcXsKKwlCRUdJTjsKKwlJTlNFUlQg SU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVz KDMsIDUpIHMoaSk7CisJVVBEQVRFIHRlc3RfdGFiIFNFVCBiID0gbWQ1KGIpIFdIRVJFIG1vZChh LDIpID0gMDsKKwlERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBtb2QoYSwzKSA9IDA7CisJU0FW RVBPSU5UIHMxOworCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkg RlJPTSBnZW5lcmF0ZV9zZXJpZXMoNiwgOCkgcyhpKTsKKwlVUERBVEUgdGVzdF90YWIgU0VUIGIg PSBtZDUoYikgV0hFUkUgbW9kKGEsMikgPSAwOworCURFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJF IG1vZChhLDMpID0gMDsKKwlTQVZFUE9JTlQgczI7CisJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VM RUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nlcmllcyg5LCAxMSkgcyhpKTsKKwlV UERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUgbW9kKGEsMikgPSAwOworCURFTEVU RSBGUk9NIHRlc3RfdGFiIFdIRVJFIG1vZChhLDMpID0gMDsKKwlTQVZFUE9JTlQgczM7CisJSU5T RVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nl cmllcygxMiwgMTQpIHMoaSk7CisJVVBEQVRFIHRlc3RfdGFiIFNFVCBiID0gbWQ1KGIpIFdIRVJF IG1vZChhLDIpID0gMDsKKwlERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBtb2QoYSwzKSA9IDA7 CisJU0FWRVBPSU5UIHM0OworCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6 dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMTUsIDE3KSBzKGkpOworCVVQREFURSB0ZXN0X3Rh YiBTRVQgYiA9IG1kNShiKSBXSEVSRSBtb2QoYSwyKSA9IDA7CisJREVMRVRFIEZST00gdGVzdF90 YWIgV0hFUkUgbW9kKGEsMykgPSAwOworCUNPTU1JVDsKKwl9KTsKKworCSRub2RlX3B1Ymxpc2hl ci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7CisKKwljaGVja19wYXJhbGxlbF9sb2coJG5v ZGVfc3Vic2NyaWJlciwgJG9mZnNldCwgJGlzX3BhcmFsbGVsLCAnQ09NTUlUJyk7CisKKwlteSAk cmVzdWx0ID0KKwkgICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQki U0VMRUNUIGNvdW50KCopLCBjb3VudChjKSwgY291bnQoZCA9IDk5OSkgRlJPTSB0ZXN0X3RhYiIp OworCWlzKCRyZXN1bHQsIHFxKDEyfDEyfDEyKSwKKwkJJ2NoZWNrIGRhdGEgd2FzIGNvcGllZCB0 byBzdWJzY3JpYmVyIGluIHN0cmVhbWluZyBtb2RlIGFuZCBleHRyYSBjb2x1bW5zIGNvbnRhaW4g bG9jYWwgZGVmYXVsdHMnCisJKTsKKworCSMgQ2xlYW51cCB0aGUgdGVzdCBkYXRhCisJJG5vZGVf cHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIkRFTEVURSBGUk9NIHRlc3RfdGFi IFdIRVJFIChhID4gMikiKTsKKwkkbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFw cG5hbWUpOworfQorCiAjIENyZWF0ZSBwdWJsaXNoZXIgbm9kZQogbXkgJG5vZGVfcHVibGlzaGVy ID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdwdWJsaXNoZXInKTsKICRub2RlX3B1 Ymxpc2hlci0+aW5pdChhbGxvd3Nfc3RyZWFtaW5nID0+ICdsb2dpY2FsJyk7CkBAIC0zNyw2ICsx MDQsMTAgQEAgJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKIAkiQ1JFQVRF IFBVQkxJQ0FUSU9OIHRhcF9wdWIgRk9SIFRBQkxFIHRlc3RfdGFiIik7CiAKIG15ICRhcHBuYW1l ID0gJ3RhcF9zdWInOworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBUZXN0 IHVzaW5nIHN0cmVhbWluZyBtb2RlICdvbicKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjCiAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKIAkiQ1JFQVRFIFNV QlNDUklQVElPTiB0YXBfc3ViIENPTk5FQ1RJT04gJyRwdWJsaXNoZXJfY29ubnN0ciBhcHBsaWNh dGlvbl9uYW1lPSRhcHBuYW1lJyBQVUJMSUNBVElPTiB0YXBfcHViIFdJVEggKHN0cmVhbWluZyA9 IG9uKSIKICk7CkBAIC00OSw0MSArMTIwLDM0IEBAIG15ICRyZXN1bHQgPQogCSJTRUxFQ1QgY291 bnQoKiksIGNvdW50KGMpLCBjb3VudChkID0gOTk5KSBGUk9NIHRlc3RfdGFiIik7CiBpcygkcmVz dWx0LCBxcSgyfDJ8MiksICdjaGVjayBpbml0aWFsIGRhdGEgd2FzIGNvcGllZCB0byBzdWJzY3Jp YmVyJyk7CiAKLSMgSW5zZXJ0LCB1cGRhdGUgYW5kIGRlbGV0ZSBzb21lIHJvd3MuCi0kbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgKLQkncG9zdGdyZXMnLCBxewotQkVHSU47Ci1JTlNFUlQgSU5U TyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDMs IDUpIHMoaSk7Ci1VUERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUgbW9kKGEsMikg PSAwOwotREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgbW9kKGEsMykgPSAwOwotU0FWRVBPSU5U IHMxOwotSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdl bmVyYXRlX3Nlcmllcyg2LCA4KSBzKGkpOwotVVBEQVRFIHRlc3RfdGFiIFNFVCBiID0gbWQ1KGIp IFdIRVJFIG1vZChhLDIpID0gMDsKLURFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIG1vZChhLDMp ID0gMDsKLVNBVkVQT0lOVCBzMjsKLUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUo aTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoOSwgMTEpIHMoaSk7Ci1VUERBVEUgdGVzdF90 YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUgbW9kKGEsMikgPSAwOwotREVMRVRFIEZST00gdGVzdF90 YWIgV0hFUkUgbW9kKGEsMykgPSAwOwotU0FWRVBPSU5UIHMzOwotSU5TRVJUIElOVE8gdGVzdF90 YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygxMiwgMTQpIHMo aSk7Ci1VUERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUgbW9kKGEsMikgPSAwOwot REVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgbW9kKGEsMykgPSAwOwotU0FWRVBPSU5UIHM0Owot SU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRl X3NlcmllcygxNSwgMTcpIHMoaSk7Ci1VUERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYikgV0hF UkUgbW9kKGEsMikgPSAwOwotREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgbW9kKGEsMykgPSAw OwotQ09NTUlUOwotfSk7Ci0KLSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBw bmFtZSk7Ci0KLSRyZXN1bHQgPQotICAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywKLQkiU0VMRUNUIGNvdW50KCopLCBjb3VudChjKSwgY291bnQoZCA9IDk5OSkgRlJPTSB0 ZXN0X3RhYiIpOwotaXMoJHJlc3VsdCwgcXEoMTJ8MTJ8MTIpLAotCSdjaGVjayBkYXRhIHdhcyBj b3BpZWQgdG8gc3Vic2NyaWJlciBpbiBzdHJlYW1pbmcgbW9kZSBhbmQgZXh0cmEgY29sdW1ucyBj b250YWluIGxvY2FsIGRlZmF1bHRzJwordGVzdF9zdHJlYW1pbmcoJG5vZGVfcHVibGlzaGVyLCAk bm9kZV9zdWJzY3JpYmVyLCAkYXBwbmFtZSwgMCk7CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjCisjIFRlc3QgdXNpbmcgc3RyZWFtaW5nIG1vZGUgJ3BhcmFsbGVsJwor IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK215ICRvbGRwaWQgPSAkbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgcGlkIEZST00gcGdf c3RhdF9yZXBsaWNhdGlvbiBXSEVSRSBhcHBsaWNhdGlvbl9uYW1lID0gJyRhcHBuYW1lJyBBTkQg c3RhdGUgPSAnc3RyZWFtaW5nJzsiCiApOwogCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywKKwkiQUxURVIgU1VCU0NSSVBUSU9OIHRhcF9zdWIgU0VUKHN0cmVhbWluZyA9 IHBhcmFsbGVsKSIpOworCiskbm9kZV9wdWJsaXNoZXItPnBvbGxfcXVlcnlfdW50aWwoJ3Bvc3Rn cmVzJywKKwkiU0VMRUNUIHBpZCAhPSAkb2xkcGlkIEZST00gcGdfc3RhdF9yZXBsaWNhdGlvbiBX SEVSRSBhcHBsaWNhdGlvbl9uYW1lID0gJyRhcHBuYW1lJyBBTkQgc3RhdGUgPSAnc3RyZWFtaW5n JzsiCisgICkKKyAgb3IgZGllCisgICJUaW1lZCBvdXQgd2hpbGUgd2FpdGluZyBmb3IgYXBwbHkg dG8gcmVzdGFydCBhZnRlciBjaGFuZ2luZyBTVUJTQ1JJUFRJT04iOworCisjIFdlIG5lZWQgdG8g Y2hlY2sgREVCVUcgbG9ncyB0byBlbnN1cmUgdGhhdCB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2Vy IGhhcworIyBhcHBsaWVkIHRoZSB0cmFuc2FjdGlvbi4gU28sIGJ1bXAgdXAgdGhlIGxvZyB2ZXJi b3NpdHkuCiskbm9kZV9zdWJzY3JpYmVyLT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywg ImxvZ19taW5fbWVzc2FnZXMgPSBkZWJ1ZzEiKTsKKyRub2RlX3N1YnNjcmliZXItPnJlbG9hZDsK KworIyBSdW4gYSBxdWVyeSB0byBtYWtlIHN1cmUgdGhhdCB0aGUgcmVsb2FkIGhhcyB0YWtlbiBl ZmZlY3QuCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXtTRUxFQ1Qg MX0pOworCit0ZXN0X3N0cmVhbWluZygkbm9kZV9wdWJsaXNoZXIsICRub2RlX3N1YnNjcmliZXIs ICRhcHBuYW1lLCAxKTsKKwogJG5vZGVfc3Vic2NyaWJlci0+c3RvcDsKICRub2RlX3B1Ymxpc2hl ci0+c3RvcDsKIApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDE3X3N0cmVh bV9kZGwucGwgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMTdfc3RyZWFtX2RkbC5wbAppbmRl eCAyZmJkNjQzZTk4Li42MjY2NzZhMzgzIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9zdWJzY3JpcHRp b24vdC8wMTdfc3RyZWFtX2RkbC5wbAorKysgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMTdf c3RyZWFtX2RkbC5wbApAQCAtMiw2ICsyLDkgQEAKICMgQ29weXJpZ2h0IChjKSAyMDIxLTIwMjMs IFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCiAKICMgVGVzdCBzdHJlYW1pbmcg b2YgbGFyZ2UgdHJhbnNhY3Rpb24gd2l0aCBEREwgYW5kIHN1YnRyYW5zYWN0aW9ucworIworIyBU aGlzIGZpbGUgaXMgbWFpbmx5IHRvIHRlc3QgdGhlIERETC9ETUwgaW50ZXJhY3Rpb24gb2YgdGhl IHB1Ymxpc2hlciBzaWRlLAorIyBzbyB3ZSBkaWRuJ3QgYWRkIGEgcGFyYWxsZWwgYXBwbHkgdmVy c2lvbiBmb3IgdGhlIHRlc3RzIGluIHRoaXMgZmlsZS4KIHVzZSBzdHJpY3Q7CiB1c2Ugd2Fybmlu Z3M7CiB1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0 L3N1YnNjcmlwdGlvbi90LzAxOF9zdHJlYW1fc3VieGFjdF9hYm9ydC5wbCBiL3NyYy90ZXN0L3N1 YnNjcmlwdGlvbi90LzAxOF9zdHJlYW1fc3VieGFjdF9hYm9ydC5wbAppbmRleCAxNzBlZTEwYzFk Li5kY2UxNGIxNTBhIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMThfc3Ry ZWFtX3N1YnhhY3RfYWJvcnQucGwKKysrIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDE4X3N0 cmVhbV9zdWJ4YWN0X2Fib3J0LnBsCkBAIC04LDYgKzgsMTI0IEBAIHVzZSBQb3N0Z3JlU1FMOjpU ZXN0OjpDbHVzdGVyOwogdXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwogdXNlIFRlc3Q6Ok1v cmU7CiAKKyMgQ2hlY2sgdGhhdCB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyIGhhcyBmaW5pc2hl ZCBhcHBseWluZyB0aGUgc3RyZWFtaW5nCisjIHRyYW5zYWN0aW9uLgorc3ViIGNoZWNrX3BhcmFs bGVsX2xvZworeworCW15ICgkbm9kZV9zdWJzY3JpYmVyLCAkb2Zmc2V0LCAkaXNfcGFyYWxsZWws ICR0eXBlKSA9IEBfOworCisJaWYgKCRpc19wYXJhbGxlbCkKKwl7CisJCSRub2RlX3N1YnNjcmli ZXItPndhaXRfZm9yX2xvZygKKwkJCXFyL0RFQlVHOiAoIFtBLVowLTldKzopPyBmaW5pc2hlZCBw cm9jZXNzaW5nIHRoZSBTVFJFQU0gJHR5cGUgY29tbWFuZC8sCisJCQkkb2Zmc2V0KTsKKwl9Cit9 CisKKyMgQ29tbW9uIHRlc3Qgc3RlcHMgZm9yIGJvdGggdGhlIHN0cmVhbWluZz1vbiBhbmQgc3Ry ZWFtaW5nPXBhcmFsbGVsIGNhc2VzLgorc3ViIHRlc3Rfc3RyZWFtaW5nCit7CisJbXkgKCRub2Rl X3B1Ymxpc2hlciwgJG5vZGVfc3Vic2NyaWJlciwgJGFwcG5hbWUsICRpc19wYXJhbGxlbCkgPSBA XzsKKworCW15ICRvZmZzZXQgPSAwOworCisJIyBDaGVjayB0aGUgc3Vic2NyaWJlciBsb2cgZnJv bSBub3cgb24uCisJJG9mZnNldCA9IC1zICRub2RlX3N1YnNjcmliZXItPmxvZ2ZpbGU7CisKKwkj IHN0cmVhbWVkIHRyYW5zYWN0aW9uIHdpdGggRERMLCBETUwgYW5kIFJPTExCQUNLcworCSRub2Rl X3B1Ymxpc2hlci0+c2FmZV9wc3FsKAorCQkncG9zdGdyZXMnLCBxeworCUJFR0lOOworCUlOU0VS VCBJTlRPIHRlc3RfdGFiIFZBTFVFUyAoMywgbWQ1KDM6OnRleHQpKTsKKwlTQVZFUE9JTlQgczE7 CisJSU5TRVJUIElOVE8gdGVzdF90YWIgVkFMVUVTICg0LCBtZDUoNDo6dGV4dCkpOworCVNBVkVQ T0lOVCBzMjsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBWQUxVRVMgKDUsIG1kNSg1Ojp0ZXh0KSk7 CisJU0FWRVBPSU5UIHMzOworCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFZBTFVFUyAoNiwgbWQ1KDY6 OnRleHQpKTsKKwlST0xMQkFDSyBUTyBzMjsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBWQUxVRVMg KDcsIG1kNSg3Ojp0ZXh0KSk7CisJUk9MTEJBQ0sgVE8gczE7CisJSU5TRVJUIElOVE8gdGVzdF90 YWIgVkFMVUVTICg4LCBtZDUoODo6dGV4dCkpOworCVNBVkVQT0lOVCBzNDsKKwlJTlNFUlQgSU5U TyB0ZXN0X3RhYiBWQUxVRVMgKDksIG1kNSg5Ojp0ZXh0KSk7CisJU0FWRVBPSU5UIHM1OworCUlO U0VSVCBJTlRPIHRlc3RfdGFiIFZBTFVFUyAoMTAsIG1kNSgxMDo6dGV4dCkpOworCUNPTU1JVDsK Kwl9KTsKKworCSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7CisK KwljaGVja19wYXJhbGxlbF9sb2coJG5vZGVfc3Vic2NyaWJlciwgJG9mZnNldCwgJGlzX3BhcmFs bGVsLCAnQ09NTUlUJyk7CisKKwlteSAkcmVzdWx0ID0KKwkgICRub2RlX3N1YnNjcmliZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiU0VMRUNUIGNvdW50KCopLCBjb3VudChjKSBGUk9NIHRl c3RfdGFiIik7CisJaXMoJHJlc3VsdCwgcXEoNnwwKSwKKwkJJ2NoZWNrIHJvbGxiYWNrIHRvIHNh dmVwb2ludCB3YXMgcmVmbGVjdGVkIG9uIHN1YnNjcmliZXIgYW5kIGV4dHJhIGNvbHVtbnMgY29u dGFpbiBsb2NhbCBkZWZhdWx0cycKKwkpOworCisJIyBDaGVjayB0aGUgc3Vic2NyaWJlciBsb2cg ZnJvbSBub3cgb24uCisJJG9mZnNldCA9IC1zICRub2RlX3N1YnNjcmliZXItPmxvZ2ZpbGU7CisK KwkjIHN0cmVhbWVkIHRyYW5zYWN0aW9uIHdpdGggc3Vic2NyaWJlciByZWNlaXZpbmcgb3V0IG9m IG9yZGVyCisJIyBzdWJ0cmFuc2FjdGlvbiBST0xMQkFDS3MKKwkkbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgKKwkJJ3Bvc3RncmVzJywgcXsKKwlCRUdJTjsKKwlJTlNFUlQgSU5UTyB0ZXN0X3Rh YiBWQUxVRVMgKDExLCBtZDUoMTE6OnRleHQpKTsKKwlTQVZFUE9JTlQgczE7CisJSU5TRVJUIElO VE8gdGVzdF90YWIgVkFMVUVTICgxMiwgbWQ1KDEyOjp0ZXh0KSk7CisJU0FWRVBPSU5UIHMyOwor CUlOU0VSVCBJTlRPIHRlc3RfdGFiIFZBTFVFUyAoMTMsIG1kNSgxMzo6dGV4dCkpOworCVNBVkVQ T0lOVCBzMzsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBWQUxVRVMgKDE0LCBtZDUoMTQ6OnRleHQp KTsKKwlSRUxFQVNFIHMyOworCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFZBTFVFUyAoMTUsIG1kNSgx NTo6dGV4dCkpOworCVJPTExCQUNLIFRPIHMxOworCUNPTU1JVDsKKwl9KTsKKworCSRub2RlX3B1 Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7CisKKwljaGVja19wYXJhbGxlbF9s b2coJG5vZGVfc3Vic2NyaWJlciwgJG9mZnNldCwgJGlzX3BhcmFsbGVsLCAnQ09NTUlUJyk7CisK KwkkcmVzdWx0ID0KKwkgICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAor CQkiU0VMRUNUIGNvdW50KCopLCBjb3VudChjKSBGUk9NIHRlc3RfdGFiIik7CisJaXMoJHJlc3Vs dCwgcXEoN3wwKSwKKwkJJ2NoZWNrIHJvbGxiYWNrIHRvIHNhdmVwb2ludCB3YXMgcmVmbGVjdGVk IG9uIHN1YnNjcmliZXInKTsKKworCSMgQ2hlY2sgdGhlIHN1YnNjcmliZXIgbG9nIGZyb20gbm93 IG9uLgorCSRvZmZzZXQgPSAtcyAkbm9kZV9zdWJzY3JpYmVyLT5sb2dmaWxlOworCisJIyBzdHJl YW1lZCB0cmFuc2FjdGlvbiB3aXRoIHN1YnNjcmliZXIgcmVjZWl2aW5nIHJvbGxiYWNrCisJJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCisJCSdwb3N0Z3JlcycsIHF7CisJQkVHSU47CisJSU5T RVJUIElOVE8gdGVzdF90YWIgVkFMVUVTICgxNiwgbWQ1KDE2Ojp0ZXh0KSk7CisJU0FWRVBPSU5U IHMxOworCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFZBTFVFUyAoMTcsIG1kNSgxNzo6dGV4dCkpOwor CVNBVkVQT0lOVCBzMjsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBWQUxVRVMgKDE4LCBtZDUoMTg6 OnRleHQpKTsKKwlST0xMQkFDSzsKKwl9KTsKKworCSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3Jf Y2F0Y2h1cCgkYXBwbmFtZSk7CisKKwljaGVja19wYXJhbGxlbF9sb2coJG5vZGVfc3Vic2NyaWJl ciwgJG9mZnNldCwgJGlzX3BhcmFsbGVsLCAnQUJPUlQnKTsKKworCSRyZXN1bHQgPQorCSAgJG5v ZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJTRUxFQ1QgY291bnQoKiks IGNvdW50KGMpIEZST00gdGVzdF90YWIiKTsKKwlpcygkcmVzdWx0LCBxcSg3fDApLCAnY2hlY2sg cm9sbGJhY2sgd2FzIHJlZmxlY3RlZCBvbiBzdWJzY3JpYmVyJyk7CisKKwkjIENsZWFudXAgdGhl IHRlc3QgZGF0YQorCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJE RUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSAoYSA+IDIpIik7CisJJG5vZGVfcHVibGlzaGVyLT53 YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKK30KKwogIyBDcmVhdGUgcHVibGlzaGVyIG5vZGUK IG15ICRub2RlX3B1Ymxpc2hlciA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygncHVi bGlzaGVyJyk7CiAkbm9kZV9wdWJsaXNoZXItPmluaXQoYWxsb3dzX3N0cmVhbWluZyA9PiAnbG9n aWNhbCcpOwpAQCAtMzYsNiArMTU0LDEwIEBAICRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsCiAJIkNSRUFURSBQVUJMSUNBVElPTiB0YXBfcHViIEZPUiBUQUJMRSB0ZXN0X3Rh YiIpOwogCiBteSAkYXBwbmFtZSA9ICd0YXBfc3ViJzsKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMKKyMgVGVzdCB1c2luZyBzdHJlYW1pbmcgbW9kZSAnb24nCisjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsCiAJIkNSRUFURSBTVUJTQ1JJUFRJT04gdGFwX3N1YiBDT05ORUNUSU9OICckcHVibGlz aGVyX2Nvbm5zdHIgYXBwbGljYXRpb25fbmFtZT0kYXBwbmFtZScgUFVCTElDQVRJT04gdGFwX3B1 YiBXSVRIIChzdHJlYW1pbmcgPSBvbikiCiApOwpAQCAtNDgsODEgKzE3MCwzMyBAQCBteSAkcmVz dWx0ID0KIAkiU0VMRUNUIGNvdW50KCopLCBjb3VudChjKSBGUk9NIHRlc3RfdGFiIik7CiBpcygk cmVzdWx0LCBxcSgyfDApLCAnY2hlY2sgaW5pdGlhbCBkYXRhIHdhcyBjb3BpZWQgdG8gc3Vic2Ny aWJlcicpOwogCi0jIHN0cmVhbWVkIHRyYW5zYWN0aW9uIHdpdGggRERMLCBETUwgYW5kIFJPTExC QUNLcwotJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCi0JJ3Bvc3RncmVzJywgcXsKLUJFR0lO OwotSU5TRVJUIElOVE8gdGVzdF90YWIgVkFMVUVTICgzLCBtZDUoMzo6dGV4dCkpOwotU0FWRVBP SU5UIHMxOwotSU5TRVJUIElOVE8gdGVzdF90YWIgVkFMVUVTICg0LCBtZDUoNDo6dGV4dCkpOwot U0FWRVBPSU5UIHMyOwotSU5TRVJUIElOVE8gdGVzdF90YWIgVkFMVUVTICg1LCBtZDUoNTo6dGV4 dCkpOwotU0FWRVBPSU5UIHMzOwotSU5TRVJUIElOVE8gdGVzdF90YWIgVkFMVUVTICg2LCBtZDUo Njo6dGV4dCkpOwotUk9MTEJBQ0sgVE8gczI7Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBWQUxVRVMg KDcsIG1kNSg3Ojp0ZXh0KSk7Ci1ST0xMQkFDSyBUTyBzMTsKLUlOU0VSVCBJTlRPIHRlc3RfdGFi IFZBTFVFUyAoOCwgbWQ1KDg6OnRleHQpKTsKLVNBVkVQT0lOVCBzNDsKLUlOU0VSVCBJTlRPIHRl c3RfdGFiIFZBTFVFUyAoOSwgbWQ1KDk6OnRleHQpKTsKLVNBVkVQT0lOVCBzNTsKLUlOU0VSVCBJ TlRPIHRlc3RfdGFiIFZBTFVFUyAoMTAsIG1kNSgxMDo6dGV4dCkpOwotQ09NTUlUOwotfSk7Ci0K LSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7Ci0KLSRyZXN1bHQg PQotICAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiU0VMRUNUIGNv dW50KCopLCBjb3VudChjKSBGUk9NIHRlc3RfdGFiIik7Ci1pcygkcmVzdWx0LCBxcSg2fDApLAot CSdjaGVjayByb2xsYmFjayB0byBzYXZlcG9pbnQgd2FzIHJlZmxlY3RlZCBvbiBzdWJzY3JpYmVy IGFuZCBleHRyYSBjb2x1bW5zIGNvbnRhaW4gbG9jYWwgZGVmYXVsdHMnCit0ZXN0X3N0cmVhbWlu Zygkbm9kZV9wdWJsaXNoZXIsICRub2RlX3N1YnNjcmliZXIsICRhcHBuYW1lLCAwKTsKKworIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVGVzdCB1c2luZyBzdHJlYW1p bmcgbW9kZSAncGFyYWxsZWwnCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IworbXkgJG9sZHBpZCA9ICRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJ IlNFTEVDVCBwaWQgRlJPTSBwZ19zdGF0X3JlcGxpY2F0aW9uIFdIRVJFIGFwcGxpY2F0aW9uX25h bWUgPSAnJGFwcG5hbWUnIEFORCBzdGF0ZSA9ICdzdHJlYW1pbmcnOyIKICk7CiAKLSMgc3RyZWFt ZWQgdHJhbnNhY3Rpb24gd2l0aCBzdWJzY3JpYmVyIHJlY2VpdmluZyBvdXQgb2Ygb3JkZXIgc3Vi dHJhbnNhY3Rpb24KLSMgUk9MTEJBQ0tzCi0kbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKLQkn cG9zdGdyZXMnLCBxewotQkVHSU47Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBWQUxVRVMgKDExLCBt ZDUoMTE6OnRleHQpKTsKLVNBVkVQT0lOVCBzMTsKLUlOU0VSVCBJTlRPIHRlc3RfdGFiIFZBTFVF UyAoMTIsIG1kNSgxMjo6dGV4dCkpOwotU0FWRVBPSU5UIHMyOwotSU5TRVJUIElOVE8gdGVzdF90 YWIgVkFMVUVTICgxMywgbWQ1KDEzOjp0ZXh0KSk7Ci1TQVZFUE9JTlQgczM7Ci1JTlNFUlQgSU5U TyB0ZXN0X3RhYiBWQUxVRVMgKDE0LCBtZDUoMTQ6OnRleHQpKTsKLVJFTEVBU0UgczI7Ci1JTlNF UlQgSU5UTyB0ZXN0X3RhYiBWQUxVRVMgKDE1LCBtZDUoMTU6OnRleHQpKTsKLVJPTExCQUNLIFRP IHMxOwotQ09NTUlUOwotfSk7Ci0KLSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgk YXBwbmFtZSk7Ci0KLSRyZXN1bHQgPQotICAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywKLQkiU0VMRUNUIGNvdW50KCopLCBjb3VudChjKSBGUk9NIHRlc3RfdGFiIik7Ci1p cygkcmVzdWx0LCBxcSg3fDApLAotCSdjaGVjayByb2xsYmFjayB0byBzYXZlcG9pbnQgd2FzIHJl ZmxlY3RlZCBvbiBzdWJzY3JpYmVyJyk7Ci0KLSMgc3RyZWFtZWQgdHJhbnNhY3Rpb24gd2l0aCBz dWJzY3JpYmVyIHJlY2VpdmluZyByb2xsYmFjawotJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo Ci0JJ3Bvc3RncmVzJywgcXsKLUJFR0lOOwotSU5TRVJUIElOVE8gdGVzdF90YWIgVkFMVUVTICgx NiwgbWQ1KDE2Ojp0ZXh0KSk7Ci1TQVZFUE9JTlQgczE7Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBW QUxVRVMgKDE3LCBtZDUoMTc6OnRleHQpKTsKLVNBVkVQT0lOVCBzMjsKLUlOU0VSVCBJTlRPIHRl c3RfdGFiIFZBTFVFUyAoMTgsIG1kNSgxODo6dGV4dCkpOwotUk9MTEJBQ0s7Ci19KTsKLQotJG5v ZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKLQotJHJlc3VsdCA9Ci0g ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJTRUxFQ1QgY291bnQo KiksIGNvdW50KGMpIEZST00gdGVzdF90YWIiKTsKLWlzKCRyZXN1bHQsIHFxKDd8MCksICdjaGVj ayByb2xsYmFjayB3YXMgcmVmbGVjdGVkIG9uIHN1YnNjcmliZXInKTsKKyRub2RlX3N1YnNjcmli ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJBTFRFUiBTVUJTQ1JJUFRJT04gdGFwX3N1YiBT RVQoc3RyZWFtaW5nID0gcGFyYWxsZWwpIik7CisKKyRub2RlX3B1Ymxpc2hlci0+cG9sbF9xdWVy eV91bnRpbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgcGlkICE9ICRvbGRwaWQgRlJPTSBwZ19zdGF0 X3JlcGxpY2F0aW9uIFdIRVJFIGFwcGxpY2F0aW9uX25hbWUgPSAnJGFwcG5hbWUnIEFORCBzdGF0 ZSA9ICdzdHJlYW1pbmcnOyIKKyAgKQorICBvciBkaWUKKyAgIlRpbWVkIG91dCB3aGlsZSB3YWl0 aW5nIGZvciBhcHBseSB0byByZXN0YXJ0IGFmdGVyIGNoYW5naW5nIFNVQlNDUklQVElPTiI7CisK KyMgV2UgbmVlZCB0byBjaGVjayBERUJVRyBsb2dzIHRvIGVuc3VyZSB0aGF0IHRoZSBwYXJhbGxl bCBhcHBseSB3b3JrZXIgaGFzCisjIGFwcGxpZWQgdGhlIHRyYW5zYWN0aW9uLiBTbywgYnVtcCB1 cCB0aGUgbG9nIHZlcmJvc2l0eS4KKyRub2RlX3N1YnNjcmliZXItPmFwcGVuZF9jb25mKCdwb3N0 Z3Jlc3FsLmNvbmYnLCAibG9nX21pbl9tZXNzYWdlcyA9IGRlYnVnMSIpOworJG5vZGVfc3Vic2Ny aWJlci0+cmVsb2FkOworCisjIFJ1biBhIHF1ZXJ5IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSByZWxv YWQgaGFzIHRha2VuIGVmZmVjdC4KKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCBxe1NFTEVDVCAxfSk7CisKK3Rlc3Rfc3RyZWFtaW5nKCRub2RlX3B1Ymxpc2hlciwgJG5v ZGVfc3Vic2NyaWJlciwgJGFwcG5hbWUsIDEpOwogCiAkbm9kZV9zdWJzY3JpYmVyLT5zdG9wOwog JG5vZGVfcHVibGlzaGVyLT5zdG9wOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9u L3QvMDE5X3N0cmVhbV9zdWJ4YWN0X2RkbF9hYm9ydC5wbCBiL3NyYy90ZXN0L3N1YnNjcmlwdGlv bi90LzAxOV9zdHJlYW1fc3VieGFjdF9kZGxfYWJvcnQucGwKaW5kZXggOTYyZTM0NzI4OC4uYjMw MjIzZGU1MSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDE5X3N0cmVhbV9z dWJ4YWN0X2RkbF9hYm9ydC5wbAorKysgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMTlfc3Ry ZWFtX3N1YnhhY3RfZGRsX2Fib3J0LnBsCkBAIC0zLDYgKzMsOSBAQAogCiAjIFRlc3Qgc3RyZWFt aW5nIG9mIHRyYW5zYWN0aW9uIHdpdGggc3VidHJhbnNhY3Rpb25zLCBERExzLCBETUxzLCBhbmQK ICMgcm9sbGJhY2tzCisjCisjIFRoaXMgZmlsZSBpcyBtYWlubHkgdG8gdGVzdCB0aGUgRERML0RN TCBpbnRlcmFjdGlvbiBvZiB0aGUgcHVibGlzaGVyIHNpZGUsCisjIHNvIHdlIGRpZG4ndCBhZGQg YSBwYXJhbGxlbCBhcHBseSB2ZXJzaW9uIGZvciB0aGUgdGVzdHMgaW4gdGhpcyBmaWxlLgogdXNl IHN0cmljdDsKIHVzZSB3YXJuaW5nczsKIHVzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwpk aWZmIC0tZ2l0IGEvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDIyX3R3b3BoYXNlX2Nhc2NhZGUu cGwgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMjJfdHdvcGhhc2VfY2FzY2FkZS5wbAppbmRl eCA4ZTNlNzRiMTM0Li5lNjI0ZWJlNTVjIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9zdWJzY3JpcHRp b24vdC8wMjJfdHdvcGhhc2VfY2FzY2FkZS5wbAorKysgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24v dC8wMjJfdHdvcGhhc2VfY2FzY2FkZS5wbApAQCAtNSw2ICs1LDggQEAKICMKICMgSW5jbHVkZXMg dGVzdHMgZm9yIG9wdGlvbnMgMlBDIChub3Qtc3RyZWFtaW5nKSBhbmQgYWxzbyBmb3IgMlBDIChz dHJlYW1pbmcpLgogIworIyBUd28tcGhhc2UgYW5kIHBhcmFsbGVsIGFwcGx5IHdpbGwgYmUgdGVz dGVkIGluIDAyM190d29waGFzZV9zdHJlYW0sIHNvIHdlCisjIGRpZG4ndCBhZGQgYSBwYXJhbGxl bCBhcHBseSB2ZXJzaW9uIGZvciB0aGUgdGVzdHMgaW4gdGhpcyBmaWxlLgogdXNlIHN0cmljdDsK IHVzZSB3YXJuaW5nczsKIHVzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwpkaWZmIC0tZ2l0 IGEvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDIzX3R3b3BoYXNlX3N0cmVhbS5wbCBiL3NyYy90 ZXN0L3N1YnNjcmlwdGlvbi90LzAyM190d29waGFzZV9zdHJlYW0ucGwKaW5kZXggN2NkODAxNzRh MS4uNzVjYTgzNzY1ZSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDIzX3R3 b3BoYXNlX3N0cmVhbS5wbAorKysgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMjNfdHdvcGhh c2Vfc3RyZWFtLnBsCkBAIC04LDYgKzgsMjg5IEBAIHVzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVz dGVyOwogdXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwogdXNlIFRlc3Q6Ok1vcmU7CiAKKyMg Q2hlY2sgdGhhdCB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyIGhhcyBmaW5pc2hlZCBhcHBseWlu ZyB0aGUgc3RyZWFtaW5nCisjIHRyYW5zYWN0aW9uLgorc3ViIGNoZWNrX3BhcmFsbGVsX2xvZwor eworCW15ICgkbm9kZV9zdWJzY3JpYmVyLCAkb2Zmc2V0LCAkaXNfcGFyYWxsZWwsICR0eXBlKSA9 IEBfOworCisJaWYgKCRpc19wYXJhbGxlbCkKKwl7CisJCSRub2RlX3N1YnNjcmliZXItPndhaXRf Zm9yX2xvZygKKwkJCXFyL0RFQlVHOiAoIFtBLVowLTldKzopPyBmaW5pc2hlZCBwcm9jZXNzaW5n IHRoZSBTVFJFQU0gJHR5cGUgY29tbWFuZC8sCisJCQkkb2Zmc2V0KTsKKwl9Cit9CisKKyMgQ29t bW9uIHRlc3Qgc3RlcHMgZm9yIGJvdGggdGhlIHN0cmVhbWluZz1vbiBhbmQgc3RyZWFtaW5nPXBh cmFsbGVsIGNhc2VzLgorc3ViIHRlc3Rfc3RyZWFtaW5nCit7CisJbXkgKCRub2RlX3B1Ymxpc2hl ciwgJG5vZGVfc3Vic2NyaWJlciwgJGFwcG5hbWUsICRpc19wYXJhbGxlbCkgPSBAXzsKKworCW15 ICRvZmZzZXQgPSAwOworCisJIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCSMgVGVz dCAyUEMgUFJFUEFSRSAvIENPTU1JVCBQUkVQQVJFRC4KKwkjIDEuIERhdGEgaXMgc3RyZWFtZWQg YXMgYSAyUEMgdHJhbnNhY3Rpb24uCisJIyAyLiBUaGVuIGRvIGNvbW1pdCBwcmVwYXJlZC4KKwkj CisJIyBFeHBlY3QgYWxsIGRhdGEgaXMgcmVwbGljYXRlZCBvbiBzdWJzY3JpYmVyIHNpZGUgYWZ0 ZXIgdGhlIGNvbW1pdC4KKwkjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwkjIENo ZWNrIHRoZSBzdWJzY3JpYmVyIGxvZyBmcm9tIG5vdyBvbi4KKwkkb2Zmc2V0ID0gLXMgJG5vZGVf c3Vic2NyaWJlci0+bG9nZmlsZTsKKworCSMgY2hlY2sgdGhhdCAyUEMgZ2V0cyByZXBsaWNhdGVk IHRvIHN1YnNjcmliZXIKKwkjIEluc2VydCwgdXBkYXRlIGFuZCBkZWxldGUgc29tZSByb3dzLgor CSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAorCQkncG9zdGdyZXMnLCBxeworCQlCRUdJTjsK KwkJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVy YXRlX3NlcmllcygzLCA1KSBzKGkpOworCQlVUERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYikg V0hFUkUgbW9kKGEsMikgPSAwOworCQlERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBtb2QoYSwz KSA9IDA7CisJCVBSRVBBUkUgVFJBTlNBQ1RJT04gJ3Rlc3RfcHJlcGFyZWRfdGFiJzt9KTsKKwor CSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7CisKKwljaGVja19w YXJhbGxlbF9sb2coJG5vZGVfc3Vic2NyaWJlciwgJG9mZnNldCwgJGlzX3BhcmFsbGVsLCAnUFJF UEFSRScpOworCisJIyBjaGVjayB0aGF0IHRyYW5zYWN0aW9uIGlzIGluIHByZXBhcmVkIHN0YXRl IG9uIHN1YnNjcmliZXIKKwlteSAkcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsCisJCSJTRUxFQ1QgY291bnQoKikgRlJPTSBwZ19wcmVwYXJlZF94YWN0czsi KTsKKwlpcygkcmVzdWx0LCBxcSgxKSwgJ3RyYW5zYWN0aW9uIGlzIHByZXBhcmVkIG9uIHN1YnNj cmliZXInKTsKKworCSMgMlBDIHRyYW5zYWN0aW9uIGdldHMgY29tbWl0dGVkCisJJG5vZGVfcHVi bGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIkNPTU1JVCBQUkVQQVJFRCAndGVzdF9w cmVwYXJlZF90YWInOyIpOworCisJJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRh cHBuYW1lKTsKKworCSMgY2hlY2sgdGhhdCB0cmFuc2FjdGlvbiBpcyBjb21taXR0ZWQgb24gc3Vi c2NyaWJlcgorCSRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywKKwkJIlNFTEVDVCBjb3VudCgqKSwgY291bnQoYyksIGNvdW50KGQgPSA5OTkpIEZST00gdGVz dF90YWIiKTsKKwlpcygkcmVzdWx0LCBxcSg0fDR8NCksCisJCSdSb3dzIGluc2VydGVkIGJ5IDJQ QyBoYXZlIGNvbW1pdHRlZCBvbiBzdWJzY3JpYmVyLCBhbmQgZXh0cmEgY29sdW1ucyBjb250YWlu IGxvY2FsIGRlZmF1bHRzJworCSk7CisJJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLAorCQkiU0VMRUNUIGNvdW50KCopIEZST00gcGdfcHJlcGFyZWRfeGFj dHM7Iik7CisJaXMoJHJlc3VsdCwgcXEoMCksICd0cmFuc2FjdGlvbiBpcyBjb21taXR0ZWQgb24g c3Vic2NyaWJlcicpOworCisJIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCSMgVGVz dCAyUEMgUFJFUEFSRSAvIFJPTExCQUNLIFBSRVBBUkVELgorCSMgMS4gVGFibGUgaXMgZGVsZXRl ZCBiYWNrIHRvIDIgcm93cyB3aGljaCBhcmUgcmVwbGljYXRlZCBvbiBzdWJzY3JpYmVyLgorCSMg Mi4gRGF0YSBpcyBzdHJlYW1lZCB1c2luZyAyUEMuCisJIyAzLiBEbyByb2xsYmFjayBwcmVwYXJl ZC4KKwkjCisJIyBFeHBlY3QgZGF0YSByb2xscyBiYWNrIGxlYXZpbmcgb25seSB0aGUgb3JpZ2lu YWwgMiByb3dzLgorCSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCSMgRmlyc3Qs IGRlbGV0ZSB0aGUgZGF0YSBleGNlcHQgZm9yIDIgcm93cyAod2lsbCBiZSByZXBsaWNhdGVkKQor CSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJERUxFVEUgRlJPTSB0 ZXN0X3RhYiBXSEVSRSBhID4gMjsiKTsKKworCSMgQ2hlY2sgdGhlIHN1YnNjcmliZXIgbG9nIGZy b20gbm93IG9uLgorCSRvZmZzZXQgPSAtcyAkbm9kZV9zdWJzY3JpYmVyLT5sb2dmaWxlOworCisJ IyBUaGVuIGluc2VydCwgdXBkYXRlIGFuZCBkZWxldGUgc29tZSByb3dzLgorCSRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKAorCQkncG9zdGdyZXMnLCBxeworCQlCRUdJTjsKKwkJSU5TRVJUIElO VE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nlcmllcygz LCA1KSBzKGkpOworCQlVUERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUgbW9kKGEs MikgPSAwOworCQlERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBtb2QoYSwzKSA9IDA7CisJCVBS RVBBUkUgVFJBTlNBQ1RJT04gJ3Rlc3RfcHJlcGFyZWRfdGFiJzt9KTsKKworCSRub2RlX3B1Ymxp c2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7CisKKwljaGVja19wYXJhbGxlbF9sb2co JG5vZGVfc3Vic2NyaWJlciwgJG9mZnNldCwgJGlzX3BhcmFsbGVsLCAnUFJFUEFSRScpOworCisJ IyBjaGVjayB0aGF0IHRyYW5zYWN0aW9uIGlzIGluIHByZXBhcmVkIHN0YXRlIG9uIHN1YnNjcmli ZXIKKwkkcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJ CSJTRUxFQ1QgY291bnQoKikgRlJPTSBwZ19wcmVwYXJlZF94YWN0czsiKTsKKwlpcygkcmVzdWx0 LCBxcSgxKSwgJ3RyYW5zYWN0aW9uIGlzIHByZXBhcmVkIG9uIHN1YnNjcmliZXInKTsKKworCSMg MlBDIHRyYW5zYWN0aW9uIGdldHMgYWJvcnRlZAorCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsCisJCSJST0xMQkFDSyBQUkVQQVJFRCAndGVzdF9wcmVwYXJlZF90YWInOyIp OworCisJJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKKworCSMg Y2hlY2sgdGhhdCB0cmFuc2FjdGlvbiBpcyBhYm9ydGVkIG9uIHN1YnNjcmliZXIKKwkkcmVzdWx0 ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJTRUxFQ1QgY291 bnQoKiksIGNvdW50KGMpLCBjb3VudChkID0gOTk5KSBGUk9NIHRlc3RfdGFiIik7CisJaXMoJHJl c3VsdCwgcXEoMnwyfDIpLAorCQknUm93cyBpbnNlcnRlZCBieSAyUEMgYXJlIHJvbGxlZCBiYWNr LCBsZWF2aW5nIG9ubHkgdGhlIG9yaWdpbmFsIDIgcm93cycKKwkpOworCisJJHJlc3VsdCA9ICRu b2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiU0VMRUNUIGNvdW50KCop IEZST00gcGdfcHJlcGFyZWRfeGFjdHM7Iik7CisJaXMoJHJlc3VsdCwgcXEoMCksICd0cmFuc2Fj dGlvbiBpcyBhYm9ydGVkIG9uIHN1YnNjcmliZXInKTsKKworCSMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMKKwkjIENoZWNrIHRoYXQgMlBDIENPTU1JVCBQUkVQQVJFRCBpcyBkZWNvZGVk IHByb3Blcmx5IG9uIGNyYXNoIHJlc3RhcnQuCisJIyAxLiBpbnNlcnQsIHVwZGF0ZSBhbmQgZGVs ZXRlIHNvbWUgcm93cy4KKwkjIDIuIFRoZW4gc2VydmVyIGNyYXNoZXMgYmVmb3JlIHRoZSAyUEMg dHJhbnNhY3Rpb24gaXMgY29tbWl0dGVkLgorCSMgMy4gQWZ0ZXIgc2VydmVycyBhcmUgcmVzdGFy dGVkIHRoZSBwZW5kaW5nIHRyYW5zYWN0aW9uIGlzIGNvbW1pdHRlZC4KKwkjCisJIyBFeHBlY3Qg YWxsIGRhdGEgaXMgcmVwbGljYXRlZCBvbiBzdWJzY3JpYmVyIHNpZGUgYWZ0ZXIgdGhlIGNvbW1p dC4KKwkjIE5vdGU6IGJvdGggcHVibGlzaGVyIGFuZCBzdWJzY3JpYmVyIGRvIGNyYXNoL3Jlc3Rh cnQuCisJIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJIyBDaGVjayB0aGUgc3Vi c2NyaWJlciBsb2cgZnJvbSBub3cgb24uCisJJG9mZnNldCA9IC1zICRub2RlX3N1YnNjcmliZXIt PmxvZ2ZpbGU7CisKKwkkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKKwkJJ3Bvc3RncmVzJywg cXsKKwkJQkVHSU47CisJCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4 dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMywgNSkgcyhpKTsKKwkJVVBEQVRFIHRlc3RfdGFiIFNF VCBiID0gbWQ1KGIpIFdIRVJFIG1vZChhLDIpID0gMDsKKwkJREVMRVRFIEZST00gdGVzdF90YWIg V0hFUkUgbW9kKGEsMykgPSAwOworCQlQUkVQQVJFIFRSQU5TQUNUSU9OICd0ZXN0X3ByZXBhcmVk X3RhYic7fSk7CisKKwkkbm9kZV9zdWJzY3JpYmVyLT5zdG9wKCdpbW1lZGlhdGUnKTsKKwkkbm9k ZV9wdWJsaXNoZXItPnN0b3AoJ2ltbWVkaWF0ZScpOworCisJJG5vZGVfcHVibGlzaGVyLT5zdGFy dDsKKwkkbm9kZV9zdWJzY3JpYmVyLT5zdGFydDsKKworCSMgV2UgZG9uJ3QgdHJ5IHRvIGNoZWNr IHRoZSBsb2cgZm9yIHBhcmFsbGVsIG9wdGlvbiBoZXJlIGFzIHRoZSBzdWJzY3JpYmVyCisJIyBt YXkgaGF2ZSBzdG9wcGVkIGFmdGVyIGZpbmlzaGluZyB0aGUgcHJlcGFyZSBhbmQgYmVmb3JlIGxv Z2dpbmcgdGhlCisJIyBhcHByb3ByaWF0ZSBtZXNzYWdlLgorCisJIyBjb21taXQgcG9zdCB0aGUg cmVzdGFydAorCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJDT01N SVQgUFJFUEFSRUQgJ3Rlc3RfcHJlcGFyZWRfdGFiJzsiKTsKKwkkbm9kZV9wdWJsaXNoZXItPndh aXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOworCisJIyBjaGVjayBpbnNlcnRzIGFyZSB2aXNpYmxl CisJJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQki U0VMRUNUIGNvdW50KCopLCBjb3VudChjKSwgY291bnQoZCA9IDk5OSkgRlJPTSB0ZXN0X3RhYiIp OworCWlzKCRyZXN1bHQsIHFxKDR8NHw0KSwKKwkJJ1Jvd3MgaW5zZXJ0ZWQgYnkgMlBDIGhhdmUg Y29tbWl0dGVkIG9uIHN1YnNjcmliZXIsIGFuZCBleHRyYSBjb2x1bW5zIGNvbnRhaW4gbG9jYWwg ZGVmYXVsdHMnCisJKTsKKworCSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwkjIERv IElOU0VSVCBhZnRlciB0aGUgUFJFUEFSRSBidXQgYmVmb3JlIFJPTExCQUNLIFBSRVBBUkVELgor CSMgMS4gVGFibGUgaXMgZGVsZXRlZCBiYWNrIHRvIDIgcm93cyB3aGljaCBhcmUgcmVwbGljYXRl ZCBvbiBzdWJzY3JpYmVyLgorCSMgMi4gRGF0YSBpcyBzdHJlYW1lZCB1c2luZyAyUEMuCisJIyAz LiBBIHNpbmdsZSByb3cgSU5TRVJUIGlzIGRvbmUgd2hpY2ggaXMgYWZ0ZXIgdGhlIFBSRVBBUkUu CisJIyA0LiBUaGVuIGRvIGEgUk9MTEJBQ0sgUFJFUEFSRUQuCisJIworCSMgRXhwZWN0IHRoZSAy UEMgZGF0YSByb2xscyBiYWNrIGxlYXZpbmcgb25seSAzIHJvd3Mgb24gdGhlIHN1YnNjcmliZXIK KwkjICh0aGUgb3JpZ2luYWwgMiArIGluc2VydGVkIDEpLgorCSMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMKKworCSMgRmlyc3QsIGRlbGV0ZSB0aGUgZGF0YSBleGNlcHQgZm9yIDIgcm93 cyAod2lsbCBiZSByZXBsaWNhdGVkKQorCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsCisJCSJERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBhID4gMjsiKTsKKworCSMgQ2hl Y2sgdGhlIHN1YnNjcmliZXIgbG9nIGZyb20gbm93IG9uLgorCSRvZmZzZXQgPSAtcyAkbm9kZV9z dWJzY3JpYmVyLT5sb2dmaWxlOworCisJIyBUaGVuIGluc2VydCwgdXBkYXRlIGFuZCBkZWxldGUg c29tZSByb3dzLgorCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAorCQkncG9zdGdyZXMnLCBx eworCQlCRUdJTjsKKwkJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0 KSBGUk9NIGdlbmVyYXRlX3NlcmllcygzLCA1KSBzKGkpOworCQlVUERBVEUgdGVzdF90YWIgU0VU IGIgPSBtZDUoYikgV0hFUkUgbW9kKGEsMikgPSAwOworCQlERUxFVEUgRlJPTSB0ZXN0X3RhYiBX SEVSRSBtb2QoYSwzKSA9IDA7CisJCVBSRVBBUkUgVFJBTlNBQ1RJT04gJ3Rlc3RfcHJlcGFyZWRf dGFiJzt9KTsKKworCSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7 CisKKwljaGVja19wYXJhbGxlbF9sb2coJG5vZGVfc3Vic2NyaWJlciwgJG9mZnNldCwgJGlzX3Bh cmFsbGVsLCAnUFJFUEFSRScpOworCisJIyBjaGVjayB0aGF0IHRyYW5zYWN0aW9uIGlzIGluIHBy ZXBhcmVkIHN0YXRlIG9uIHN1YnNjcmliZXIKKwkkcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJTRUxFQ1QgY291bnQoKikgRlJPTSBwZ19wcmVwYXJl ZF94YWN0czsiKTsKKwlpcygkcmVzdWx0LCBxcSgxKSwgJ3RyYW5zYWN0aW9uIGlzIHByZXBhcmVk IG9uIHN1YnNjcmliZXInKTsKKworCSMgSW5zZXJ0IGEgZGlmZmVyZW50IHJlY29yZCAobm93IHdl IGFyZSBvdXRzaWRlIG9mIHRoZSAyUEMgdHJhbnNhY3Rpb24pCisJIyBOb3RlOiB0aGUgMlBDIHRy YW5zYWN0aW9uIHN0aWxsIGhvbGRzIHJvdyBsb2NrcyBzbyBtYWtlIHN1cmUgdGhpcyBpbnNlcnQg aXMgZm9yIGEgc2VwYXJhdGUgcHJpbWFyeSBrZXkKKwkkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLAorCQkiSU5TRVJUIElOVE8gdGVzdF90YWIgVkFMVUVTICg5OTk5OSwgJ2Zv b2JhcicpIik7CisKKwkjIDJQQyB0cmFuc2FjdGlvbiBnZXRzIGFib3J0ZWQKKwkkbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiUk9MTEJBQ0sgUFJFUEFSRUQgJ3Rlc3Rf cHJlcGFyZWRfdGFiJzsiKTsKKworCSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgk YXBwbmFtZSk7CisKKwkjIGNoZWNrIHRoYXQgdHJhbnNhY3Rpb24gaXMgYWJvcnRlZCBvbiBzdWJz Y3JpYmVyLAorCSMgYnV0IHRoZSBleHRyYSBJTlNFUlQgb3V0c2lkZSBvZiB0aGUgMlBDIHN0aWxs IHdhcyByZXBsaWNhdGVkCisJJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLAorCQkiU0VMRUNUIGNvdW50KCopLCBjb3VudChjKSwgY291bnQoZCA9IDk5OSkg RlJPTSB0ZXN0X3RhYiIpOworCWlzKCRyZXN1bHQsIHFxKDN8M3wzKSwKKwkJJ2NoZWNrIHRoZSBv dXRzaWRlIGluc2VydCB3YXMgY29waWVkIHRvIHN1YnNjcmliZXInKTsKKworCSRyZXN1bHQgPSAk bm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNFTEVDVCBjb3VudCgq KSBGUk9NIHBnX3ByZXBhcmVkX3hhY3RzOyIpOworCWlzKCRyZXN1bHQsIHFxKDApLCAndHJhbnNh Y3Rpb24gaXMgYWJvcnRlZCBvbiBzdWJzY3JpYmVyJyk7CisKKwkjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjCisJIyBEbyBJTlNFUlQgYWZ0ZXIgdGhlIFBSRVBBUkUgYnV0IGJlZm9yZSBD T01NSVQgUFJFUEFSRUQuCisJIyAxLiBUYWJsZSBpcyBkZWxldGVkIGJhY2sgdG8gMiByb3dzIHdo aWNoIGFyZSByZXBsaWNhdGVkIG9uIHN1YnNjcmliZXIuCisJIyAyLiBEYXRhIGlzIHN0cmVhbWVk IHVzaW5nIDJQQy4KKwkjIDMuIEEgc2luZ2xlIHJvdyBJTlNFUlQgaXMgZG9uZSB3aGljaCBpcyBh ZnRlciB0aGUgUFJFUEFSRS4KKwkjIDQuIFRoZW4gZG8gYSBDT01NSVQgUFJFUEFSRUQuCisJIwor CSMgRXhwZWN0IDJQQyBkYXRhICsgdGhlIGV4dHJhIHJvdyBhcmUgb24gdGhlIHN1YnNjcmliZXIK KwkjICh0aGUgMzMzNCArIGluc2VydGVkIDEgPSAzMzM1KS4KKwkjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjCisKKwkjIEZpcnN0LCBkZWxldGUgdGhlIGRhdGEgZXhjZXB0IGZvciAyIHJv d3MgKHdpbGwgYmUgcmVwbGljYXRlZCkKKwkkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLAorCQkiREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgYSA+IDI7Iik7CisKKwkjIENo ZWNrIHRoZSBzdWJzY3JpYmVyIGxvZyBmcm9tIG5vdyBvbi4KKwkkb2Zmc2V0ID0gLXMgJG5vZGVf c3Vic2NyaWJlci0+bG9nZmlsZTsKKworCSMgVGhlbiBpbnNlcnQsIHVwZGF0ZSBhbmQgZGVsZXRl IHNvbWUgcm93cy4KKwkkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKKwkJJ3Bvc3RncmVzJywg cXsKKwkJQkVHSU47CisJCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4 dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMywgNSkgcyhpKTsKKwkJVVBEQVRFIHRlc3RfdGFiIFNF VCBiID0gbWQ1KGIpIFdIRVJFIG1vZChhLDIpID0gMDsKKwkJREVMRVRFIEZST00gdGVzdF90YWIg V0hFUkUgbW9kKGEsMykgPSAwOworCQlQUkVQQVJFIFRSQU5TQUNUSU9OICd0ZXN0X3ByZXBhcmVk X3RhYic7fSk7CisKKwkkbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUp OworCisJY2hlY2tfcGFyYWxsZWxfbG9nKCRub2RlX3N1YnNjcmliZXIsICRvZmZzZXQsICRpc19w YXJhbGxlbCwgJ1BSRVBBUkUnKTsKKworCSMgY2hlY2sgdGhhdCB0cmFuc2FjdGlvbiBpcyBpbiBw cmVwYXJlZCBzdGF0ZSBvbiBzdWJzY3JpYmVyCisJJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiU0VMRUNUIGNvdW50KCopIEZST00gcGdfcHJlcGFy ZWRfeGFjdHM7Iik7CisJaXMoJHJlc3VsdCwgcXEoMSksICd0cmFuc2FjdGlvbiBpcyBwcmVwYXJl ZCBvbiBzdWJzY3JpYmVyJyk7CisKKwkjIEluc2VydCBhIGRpZmZlcmVudCByZWNvcmQgKG5vdyB3 ZSBhcmUgb3V0c2lkZSBvZiB0aGUgMlBDIHRyYW5zYWN0aW9uKQorCSMgTm90ZTogdGhlIDJQQyB0 cmFuc2FjdGlvbiBzdGlsbCBob2xkcyByb3cgbG9ja3Mgc28gbWFrZSBzdXJlIHRoaXMgaW5zZXJ0 IGlzIGZvciBhIHNlcGFyYXJlIHByaW1hcnkga2V5CisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywKKwkJIklOU0VSVCBJTlRPIHRlc3RfdGFiIFZBTFVFUyAoOTk5OTksICdm b29iYXInKSIpOworCisJIyAyUEMgdHJhbnNhY3Rpb24gZ2V0cyBjb21taXR0ZWQKKwkkbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiQ09NTUlUIFBSRVBBUkVEICd0ZXN0 X3ByZXBhcmVkX3RhYic7Iik7CisKKwkkbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAo JGFwcG5hbWUpOworCisJIyBjaGVjayB0aGF0IHRyYW5zYWN0aW9uIGlzIGNvbW1pdHRlZCBvbiBz dWJzY3JpYmVyCisJJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLAorCQkiU0VMRUNUIGNvdW50KCopLCBjb3VudChjKSwgY291bnQoZCA9IDk5OSkgRlJPTSB0 ZXN0X3RhYiIpOworCWlzKCRyZXN1bHQsIHFxKDV8NXw1KSwKKwkJJ1Jvd3MgaW5zZXJ0ZWQgYnkg MlBDIChhcyB3ZWxsIGFzIG91dHNpZGUgaW5zZXJ0KSBoYXZlIGNvbW1pdHRlZCBvbiBzdWJzY3Jp YmVyLCBhbmQgZXh0cmEgY29sdW1ucyBjb250YWluIGxvY2FsIGRlZmF1bHRzJworCSk7CisKKwkk cmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJTRUxF Q1QgY291bnQoKikgRlJPTSBwZ19wcmVwYXJlZF94YWN0czsiKTsKKwlpcygkcmVzdWx0LCBxcSgw KSwgJ3RyYW5zYWN0aW9uIGlzIGNvbW1pdHRlZCBvbiBzdWJzY3JpYmVyJyk7CisKKwkjIENsZWFu dXAgdGhlIHRlc3QgZGF0YQorCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs CisJCSJERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBhID4gMjsiKTsKKwkkbm9kZV9wdWJsaXNo ZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOworfQorCiAjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjCiAjIFNldHVwCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCkBA IC00OCw2ICszMzEsMTAgQEAgJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywK IAkiQ1JFQVRFIFBVQkxJQ0FUSU9OIHRhcF9wdWIgRk9SIFRBQkxFIHRlc3RfdGFiIik7CiAKIG15 ICRhcHBuYW1lID0gJ3RhcF9zdWInOworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IworIyBUZXN0IHVzaW5nIHN0cmVhbWluZyBtb2RlICdvbicKKyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjCiAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoCiAJJ3Bvc3RncmVzJywg IgogCUNSRUFURSBTVUJTQ1JJUFRJT04gdGFwX3N1YgpAQCAtNjQsMjM2ICszNTEsMzggQEAgbXkg JHR3b3BoYXNlX3F1ZXJ5ID0KICRub2RlX3N1YnNjcmliZXItPnBvbGxfcXVlcnlfdW50aWwoJ3Bv c3RncmVzJywgJHR3b3BoYXNlX3F1ZXJ5KQogICBvciBkaWUgIlRpbWVkIG91dCB3aGlsZSB3YWl0 aW5nIGZvciBzdWJzY3JpYmVyIHRvIGVuYWJsZSB0d29waGFzZSI7CiAKLSMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMKICMgQ2hlY2sgaW5pdGlhbCBkYXRhIHdhcyBjb3BpZWQgdG8gc3Vi c2NyaWJlcgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogbXkgJHJlc3VsdCA9ICRu b2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAogCSJTRUxFQ1QgY291bnQoKiks IGNvdW50KGMpLCBjb3VudChkID0gOTk5KSBGUk9NIHRlc3RfdGFiIik7CiBpcygkcmVzdWx0LCBx cSgyfDJ8MiksICdjaGVjayBpbml0aWFsIGRhdGEgd2FzIGNvcGllZCB0byBzdWJzY3JpYmVyJyk7 CiAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgVGVzdCAyUEMgUFJFUEFSRSAv IENPTU1JVCBQUkVQQVJFRC4KLSMgMS4gRGF0YSBpcyBzdHJlYW1lZCBhcyBhIDJQQyB0cmFuc2Fj dGlvbi4KLSMgMi4gVGhlbiBkbyBjb21taXQgcHJlcGFyZWQuCi0jCi0jIEV4cGVjdCBhbGwgZGF0 YSBpcyByZXBsaWNhdGVkIG9uIHN1YnNjcmliZXIgc2lkZSBhZnRlciB0aGUgY29tbWl0LgotIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jIGNoZWNrIHRoYXQgMlBDIGdldHMgcmVw bGljYXRlZCB0byBzdWJzY3JpYmVyCi0jIEluc2VydCwgdXBkYXRlIGFuZCBkZWxldGUgc29tZSBy b3dzLgotJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCi0JJ3Bvc3RncmVzJywgcXsKLQlCRUdJ TjsKLQlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2Vu ZXJhdGVfc2VyaWVzKDMsIDUpIHMoaSk7Ci0JVVBEQVRFIHRlc3RfdGFiIFNFVCBiID0gbWQ1KGIp IFdIRVJFIG1vZChhLDIpID0gMDsKLQlERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBtb2QoYSwz KSA9IDA7Ci0JUFJFUEFSRSBUUkFOU0FDVElPTiAndGVzdF9wcmVwYXJlZF90YWInO30pOwotCi0k bm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOwotCi0jIGNoZWNrIHRo YXQgdHJhbnNhY3Rpb24gaXMgaW4gcHJlcGFyZWQgc3RhdGUgb24gc3Vic2NyaWJlcgotJHJlc3Vs dCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJTRUxFQ1QgY291 bnQoKikgRlJPTSBwZ19wcmVwYXJlZF94YWN0czsiKTsKLWlzKCRyZXN1bHQsIHFxKDEpLCAndHJh bnNhY3Rpb24gaXMgcHJlcGFyZWQgb24gc3Vic2NyaWJlcicpOwotCi0jIDJQQyB0cmFuc2FjdGlv biBnZXRzIGNvbW1pdHRlZAotJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywK LQkiQ09NTUlUIFBSRVBBUkVEICd0ZXN0X3ByZXBhcmVkX3RhYic7Iik7Ci0KLSRub2RlX3B1Ymxp c2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7Cit0ZXN0X3N0cmVhbWluZygkbm9kZV9w dWJsaXNoZXIsICRub2RlX3N1YnNjcmliZXIsICRhcHBuYW1lLCAwKTsKIAotIyBjaGVjayB0aGF0 IHRyYW5zYWN0aW9uIGlzIGNvbW1pdHRlZCBvbiBzdWJzY3JpYmVyCi0kcmVzdWx0ID0gJG5vZGVf c3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIlNFTEVDVCBjb3VudCgqKSwgY291 bnQoYyksIGNvdW50KGQgPSA5OTkpIEZST00gdGVzdF90YWIiKTsKLWlzKCRyZXN1bHQsIHFxKDR8 NHw0KSwKLQknUm93cyBpbnNlcnRlZCBieSAyUEMgaGF2ZSBjb21taXR0ZWQgb24gc3Vic2NyaWJl ciwgYW5kIGV4dHJhIGNvbHVtbnMgY29udGFpbiBsb2NhbCBkZWZhdWx0cycKKyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFRlc3QgdXNpbmcgc3RyZWFtaW5nIG1vZGUg J3BhcmFsbGVsJworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK215ICRv bGRwaWQgPSAkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1Qg cGlkIEZST00gcGdfc3RhdF9yZXBsaWNhdGlvbiBXSEVSRSBhcHBsaWNhdGlvbl9uYW1lID0gJyRh cHBuYW1lJyBBTkQgc3RhdGUgPSAnc3RyZWFtaW5nJzsiCiApOwotJHJlc3VsdCA9ICRub2RlX3N1 YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJTRUxFQ1QgY291bnQoKikgRlJPTSBw Z19wcmVwYXJlZF94YWN0czsiKTsKLWlzKCRyZXN1bHQsIHFxKDApLCAndHJhbnNhY3Rpb24gaXMg Y29tbWl0dGVkIG9uIHN1YnNjcmliZXInKTsKLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIwotIyBUZXN0IDJQQyBQUkVQQVJFIC8gUk9MTEJBQ0sgUFJFUEFSRUQuCi0jIDEuIFRhYmxl IGlzIGRlbGV0ZWQgYmFjayB0byAyIHJvd3Mgd2hpY2ggYXJlIHJlcGxpY2F0ZWQgb24gc3Vic2Ny aWJlci4KLSMgMi4gRGF0YSBpcyBzdHJlYW1lZCB1c2luZyAyUEMuCi0jIDMuIERvIHJvbGxiYWNr IHByZXBhcmVkLgotIwotIyBFeHBlY3QgZGF0YSByb2xscyBiYWNrIGxlYXZpbmcgb25seSB0aGUg b3JpZ2luYWwgMiByb3dzLgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jIEZp cnN0LCBkZWxldGUgdGhlIGRhdGEgZXhjZXB0IGZvciAyIHJvd3MgKHdpbGwgYmUgcmVwbGljYXRl ZCkKLSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJERUxFVEUgRlJPTSB0 ZXN0X3RhYiBXSEVSRSBhID4gMjsiKTsKLQotIyBUaGVuIGluc2VydCwgdXBkYXRlIGFuZCBkZWxl dGUgc29tZSByb3dzLgotJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCi0JJ3Bvc3RncmVzJywg cXsKLQlCRUdJTjsKLQlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQp IEZST00gZ2VuZXJhdGVfc2VyaWVzKDMsIDUpIHMoaSk7Ci0JVVBEQVRFIHRlc3RfdGFiIFNFVCBi ID0gbWQ1KGIpIFdIRVJFIG1vZChhLDIpID0gMDsKLQlERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVS RSBtb2QoYSwzKSA9IDA7Ci0JUFJFUEFSRSBUUkFOU0FDVElPTiAndGVzdF9wcmVwYXJlZF90YWIn O30pOwotCi0kbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOwotCi0j IGNoZWNrIHRoYXQgdHJhbnNhY3Rpb24gaXMgaW4gcHJlcGFyZWQgc3RhdGUgb24gc3Vic2NyaWJl cgotJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJT RUxFQ1QgY291bnQoKikgRlJPTSBwZ19wcmVwYXJlZF94YWN0czsiKTsKLWlzKCRyZXN1bHQsIHFx KDEpLCAndHJhbnNhY3Rpb24gaXMgcHJlcGFyZWQgb24gc3Vic2NyaWJlcicpOwotCi0jIDJQQyB0 cmFuc2FjdGlvbiBnZXRzIGFib3J0ZWQKLSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsCi0JIlJPTExCQUNLIFBSRVBBUkVEICd0ZXN0X3ByZXBhcmVkX3RhYic7Iik7Ci0KLSRu b2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7Ci0KLSMgY2hlY2sgdGhh dCB0cmFuc2FjdGlvbiBpcyBhYm9ydGVkIG9uIHN1YnNjcmliZXIKLSRyZXN1bHQgPSAkbm9kZV9z dWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiU0VMRUNUIGNvdW50KCopLCBjb3Vu dChjKSwgY291bnQoZCA9IDk5OSkgRlJPTSB0ZXN0X3RhYiIpOwotaXMoJHJlc3VsdCwgcXEoMnwy fDIpLAotCSdSb3dzIGluc2VydGVkIGJ5IDJQQyBhcmUgcm9sbGVkIGJhY2ssIGxlYXZpbmcgb25s eSB0aGUgb3JpZ2luYWwgMiByb3dzJyk7Ci0KLSRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiU0VMRUNUIGNvdW50KCopIEZST00gcGdfcHJlcGFyZWRf eGFjdHM7Iik7Ci1pcygkcmVzdWx0LCBxcSgwKSwgJ3RyYW5zYWN0aW9uIGlzIGFib3J0ZWQgb24g c3Vic2NyaWJlcicpOwotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENoZWNr IHRoYXQgMlBDIENPTU1JVCBQUkVQQVJFRCBpcyBkZWNvZGVkIHByb3Blcmx5IG9uIGNyYXNoIHJl c3RhcnQuCi0jIDEuIGluc2VydCwgdXBkYXRlIGFuZCBkZWxldGUgc29tZSByb3dzLgotIyAyLiBU aGVuIHNlcnZlciBjcmFzaGVzIGJlZm9yZSB0aGUgMlBDIHRyYW5zYWN0aW9uIGlzIGNvbW1pdHRl ZC4KLSMgMy4gQWZ0ZXIgc2VydmVycyBhcmUgcmVzdGFydGVkIHRoZSBwZW5kaW5nIHRyYW5zYWN0 aW9uIGlzIGNvbW1pdHRlZC4KLSMKLSMgRXhwZWN0IGFsbCBkYXRhIGlzIHJlcGxpY2F0ZWQgb24g c3Vic2NyaWJlciBzaWRlIGFmdGVyIHRoZSBjb21taXQuCi0jIE5vdGU6IGJvdGggcHVibGlzaGVy IGFuZCBzdWJzY3JpYmVyIGRvIGNyYXNoL3Jlc3RhcnQuCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjCi0KLSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAotCSdwb3N0Z3JlcycsIHF7 Ci0JQkVHSU47Ci0JSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBG Uk9NIGdlbmVyYXRlX3NlcmllcygzLCA1KSBzKGkpOwotCVVQREFURSB0ZXN0X3RhYiBTRVQgYiA9 IG1kNShiKSBXSEVSRSBtb2QoYSwyKSA9IDA7Ci0JREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUg bW9kKGEsMykgPSAwOwotCVBSRVBBUkUgVFJBTlNBQ1RJT04gJ3Rlc3RfcHJlcGFyZWRfdGFiJzt9 KTsKLQotJG5vZGVfc3Vic2NyaWJlci0+c3RvcCgnaW1tZWRpYXRlJyk7Ci0kbm9kZV9wdWJsaXNo ZXItPnN0b3AoJ2ltbWVkaWF0ZScpOwotCi0kbm9kZV9wdWJsaXNoZXItPnN0YXJ0OwotJG5vZGVf c3Vic2NyaWJlci0+c3RhcnQ7CiAKLSMgY29tbWl0IHBvc3QgdGhlIHJlc3RhcnQKLSRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIkNPTU1JVCBQUkVQQVJFRCAndGVzdF9w cmVwYXJlZF90YWInOyIpOwotJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBu YW1lKTsKLQotIyBjaGVjayBpbnNlcnRzIGFyZSB2aXNpYmxlCi0kcmVzdWx0ID0gJG5vZGVfc3Vi c2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIlNFTEVDVCBjb3VudCgqKSwgY291bnQo YyksIGNvdW50KGQgPSA5OTkpIEZST00gdGVzdF90YWIiKTsKLWlzKCRyZXN1bHQsIHFxKDR8NHw0 KSwKLQknUm93cyBpbnNlcnRlZCBieSAyUEMgaGF2ZSBjb21taXR0ZWQgb24gc3Vic2NyaWJlciwg YW5kIGV4dHJhIGNvbHVtbnMgY29udGFpbiBsb2NhbCBkZWZhdWx0cycKLSk7Ci0KLSMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgRG8gSU5TRVJUIGFmdGVyIHRoZSBQUkVQQVJFIGJ1 dCBiZWZvcmUgUk9MTEJBQ0sgUFJFUEFSRUQuCi0jIDEuIFRhYmxlIGlzIGRlbGV0ZWQgYmFjayB0 byAyIHJvd3Mgd2hpY2ggYXJlIHJlcGxpY2F0ZWQgb24gc3Vic2NyaWJlci4KLSMgMi4gRGF0YSBp cyBzdHJlYW1lZCB1c2luZyAyUEMuCi0jIDMuIEEgc2luZ2xlIHJvdyBJTlNFUlQgaXMgZG9uZSB3 aGljaCBpcyBhZnRlciB0aGUgUFJFUEFSRS4KLSMgNC4gVGhlbiBkbyBhIFJPTExCQUNLIFBSRVBB UkVELgotIwotIyBFeHBlY3QgdGhlIDJQQyBkYXRhIHJvbGxzIGJhY2sgbGVhdmluZyBvbmx5IDMg cm93cyBvbiB0aGUgc3Vic2NyaWJlcgotIyAodGhlIG9yaWdpbmFsIDIgKyBpbnNlcnRlZCAxKS4K LSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIyBGaXJzdCwgZGVsZXRlIHRoZSBk YXRhIGV4Y2VwdCBmb3IgMiByb3dzICh3aWxsIGJlIHJlcGxpY2F0ZWQpCi0kbm9kZV9wdWJsaXNo ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgYSA+ IDI7Iik7Ci0KLSMgVGhlbiBpbnNlcnQsIHVwZGF0ZSBhbmQgZGVsZXRlIHNvbWUgcm93cy4KLSRu b2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAotCSdwb3N0Z3JlcycsIHF7Ci0JQkVHSU47Ci0JSU5T RVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nl cmllcygzLCA1KSBzKGkpOwotCVVQREFURSB0ZXN0X3RhYiBTRVQgYiA9IG1kNShiKSBXSEVSRSBt b2QoYSwyKSA9IDA7Ci0JREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgbW9kKGEsMykgPSAwOwot CVBSRVBBUkUgVFJBTlNBQ1RJT04gJ3Rlc3RfcHJlcGFyZWRfdGFiJzt9KTsKLQotJG5vZGVfcHVi bGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKLQotIyBjaGVjayB0aGF0IHRyYW5z YWN0aW9uIGlzIGluIHByZXBhcmVkIHN0YXRlIG9uIHN1YnNjcmliZXIKLSRyZXN1bHQgPSAkbm9k ZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiU0VMRUNUIGNvdW50KCopIEZS T00gcGdfcHJlcGFyZWRfeGFjdHM7Iik7Ci1pcygkcmVzdWx0LCBxcSgxKSwgJ3RyYW5zYWN0aW9u IGlzIHByZXBhcmVkIG9uIHN1YnNjcmliZXInKTsKLQotIyBJbnNlcnQgYSBkaWZmZXJlbnQgcmVj b3JkIChub3cgd2UgYXJlIG91dHNpZGUgb2YgdGhlIDJQQyB0cmFuc2FjdGlvbikKLSMgTm90ZTog dGhlIDJQQyB0cmFuc2FjdGlvbiBzdGlsbCBob2xkcyByb3cgbG9ja3Mgc28gbWFrZSBzdXJlIHRo aXMgaW5zZXJ0IGlzIGZvciBhIHNlcGFyYXRlIHByaW1hcnkga2V5Ci0kbm9kZV9wdWJsaXNoZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJJTlNFUlQgSU5UTyB0ZXN0X3RhYiBWQUxVRVMgKDk5 OTk5LCAnZm9vYmFyJykiKTsKLQotIyAyUEMgdHJhbnNhY3Rpb24gZ2V0cyBhYm9ydGVkCi0kbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJST0xMQkFDSyBQUkVQQVJFRCAn dGVzdF9wcmVwYXJlZF90YWInOyIpOwotCi0kbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNo dXAoJGFwcG5hbWUpOwotCi0jIGNoZWNrIHRoYXQgdHJhbnNhY3Rpb24gaXMgYWJvcnRlZCBvbiBz dWJzY3JpYmVyLAotIyBidXQgdGhlIGV4dHJhIElOU0VSVCBvdXRzaWRlIG9mIHRoZSAyUEMgc3Rp bGwgd2FzIHJlcGxpY2F0ZWQKLSRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywKLQkiU0VMRUNUIGNvdW50KCopLCBjb3VudChjKSwgY291bnQoZCA9IDk5OSkg RlJPTSB0ZXN0X3RhYiIpOwotaXMoJHJlc3VsdCwgcXEoM3wzfDMpLCAnY2hlY2sgdGhlIG91dHNp ZGUgaW5zZXJ0IHdhcyBjb3BpZWQgdG8gc3Vic2NyaWJlcicpOwotCi0kcmVzdWx0ID0gJG5vZGVf c3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIlNFTEVDVCBjb3VudCgqKSBGUk9N IHBnX3ByZXBhcmVkX3hhY3RzOyIpOwotaXMoJHJlc3VsdCwgcXEoMCksICd0cmFuc2FjdGlvbiBp cyBhYm9ydGVkIG9uIHN1YnNjcmliZXInKTsKLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIwotIyBEbyBJTlNFUlQgYWZ0ZXIgdGhlIFBSRVBBUkUgYnV0IGJlZm9yZSBDT01NSVQgUFJF UEFSRUQuCi0jIDEuIFRhYmxlIGlzIGRlbGV0ZWQgYmFjayB0byAyIHJvd3Mgd2hpY2ggYXJlIHJl cGxpY2F0ZWQgb24gc3Vic2NyaWJlci4KLSMgMi4gRGF0YSBpcyBzdHJlYW1lZCB1c2luZyAyUEMu Ci0jIDMuIEEgc2luZ2xlIHJvdyBJTlNFUlQgaXMgZG9uZSB3aGljaCBpcyBhZnRlciB0aGUgUFJF UEFSRS4KLSMgNC4gVGhlbiBkbyBhIENPTU1JVCBQUkVQQVJFRC4KLSMKLSMgRXhwZWN0IDJQQyBk YXRhICsgdGhlIGV4dHJhIHJvdyBhcmUgb24gdGhlIHN1YnNjcmliZXIKLSMgKHRoZSAzMzM0ICsg aW5zZXJ0ZWQgMSA9IDMzMzUpLgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0j IEZpcnN0LCBkZWxldGUgdGhlIGRhdGEgZXhjZXB0IGZvciAyIHJvd3MgKHdpbGwgYmUgcmVwbGlj YXRlZCkKLSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJERUxFVEUgRlJP TSB0ZXN0X3RhYiBXSEVSRSBhID4gMjsiKTsKLQotIyBUaGVuIGluc2VydCwgdXBkYXRlIGFuZCBk ZWxldGUgc29tZSByb3dzLgotJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCi0JJ3Bvc3RncmVz JywgcXsKLQlCRUdJTjsKLQlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRl eHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDMsIDUpIHMoaSk7Ci0JVVBEQVRFIHRlc3RfdGFiIFNF VCBiID0gbWQ1KGIpIFdIRVJFIG1vZChhLDIpID0gMDsKLQlERUxFVEUgRlJPTSB0ZXN0X3RhYiBX SEVSRSBtb2QoYSwzKSA9IDA7Ci0JUFJFUEFSRSBUUkFOU0FDVElPTiAndGVzdF9wcmVwYXJlZF90 YWInO30pOwotCi0kbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOwot Ci0jIGNoZWNrIHRoYXQgdHJhbnNhY3Rpb24gaXMgaW4gcHJlcGFyZWQgc3RhdGUgb24gc3Vic2Ny aWJlcgotJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAot CSJTRUxFQ1QgY291bnQoKikgRlJPTSBwZ19wcmVwYXJlZF94YWN0czsiKTsKLWlzKCRyZXN1bHQs IHFxKDEpLCAndHJhbnNhY3Rpb24gaXMgcHJlcGFyZWQgb24gc3Vic2NyaWJlcicpOworJG5vZGVf c3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkFMVEVSIFNVQlNDUklQVElPTiB0 YXBfc3ViIFNFVChzdHJlYW1pbmcgPSBwYXJhbGxlbCkiKTsKIAotIyBJbnNlcnQgYSBkaWZmZXJl bnQgcmVjb3JkIChub3cgd2UgYXJlIG91dHNpZGUgb2YgdGhlIDJQQyB0cmFuc2FjdGlvbikKLSMg Tm90ZTogdGhlIDJQQyB0cmFuc2FjdGlvbiBzdGlsbCBob2xkcyByb3cgbG9ja3Mgc28gbWFrZSBz dXJlIHRoaXMgaW5zZXJ0IGlzIGZvciBhIHNlcGFyYXJlIHByaW1hcnkga2V5Ci0kbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJJTlNFUlQgSU5UTyB0ZXN0X3RhYiBWQUxV RVMgKDk5OTk5LCAnZm9vYmFyJykiKTsKKyRub2RlX3B1Ymxpc2hlci0+cG9sbF9xdWVyeV91bnRp bCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgcGlkICE9ICRvbGRwaWQgRlJPTSBwZ19zdGF0X3JlcGxp Y2F0aW9uIFdIRVJFIGFwcGxpY2F0aW9uX25hbWUgPSAnJGFwcG5hbWUnIEFORCBzdGF0ZSA9ICdz dHJlYW1pbmcnOyIKKyAgKQorICBvciBkaWUKKyAgIlRpbWVkIG91dCB3aGlsZSB3YWl0aW5nIGZv ciBhcHBseSB0byByZXN0YXJ0IGFmdGVyIGNoYW5naW5nIFNVQlNDUklQVElPTiI7CiAKLSMgMlBD IHRyYW5zYWN0aW9uIGdldHMgY29tbWl0dGVkCi0kbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLAotCSJDT01NSVQgUFJFUEFSRUQgJ3Rlc3RfcHJlcGFyZWRfdGFiJzsiKTsKKyMg V2UgbmVlZCB0byBjaGVjayBERUJVRyBsb2dzIHRvIGVuc3VyZSB0aGF0IHRoZSBwYXJhbGxlbCBh cHBseSB3b3JrZXIgaGFzCisjIGFwcGxpZWQgdGhlIHRyYW5zYWN0aW9uLiBTbywgYnVtcCB1cCB0 aGUgbG9nIHZlcmJvc2l0eS4KKyRub2RlX3N1YnNjcmliZXItPmFwcGVuZF9jb25mKCdwb3N0Z3Jl c3FsLmNvbmYnLCAibG9nX21pbl9tZXNzYWdlcyA9IGRlYnVnMSIpOworJG5vZGVfc3Vic2NyaWJl ci0+cmVsb2FkOwogCi0kbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUp OworIyBSdW4gYSBxdWVyeSB0byBtYWtlIHN1cmUgdGhhdCB0aGUgcmVsb2FkIGhhcyB0YWtlbiBl ZmZlY3QuCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXtTRUxFQ1Qg MX0pOwogCi0jIGNoZWNrIHRoYXQgdHJhbnNhY3Rpb24gaXMgY29tbWl0dGVkIG9uIHN1YnNjcmli ZXIKLSRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQki U0VMRUNUIGNvdW50KCopLCBjb3VudChjKSwgY291bnQoZCA9IDk5OSkgRlJPTSB0ZXN0X3RhYiIp OwotaXMoJHJlc3VsdCwgcXEoNXw1fDUpLAotCSdSb3dzIGluc2VydGVkIGJ5IDJQQyAoYXMgd2Vs bCBhcyBvdXRzaWRlIGluc2VydCkgaGF2ZSBjb21taXR0ZWQgb24gc3Vic2NyaWJlciwgYW5kIGV4 dHJhIGNvbHVtbnMgY29udGFpbiBsb2NhbCBkZWZhdWx0cycKLSk7Ci0KLSRyZXN1bHQgPSAkbm9k ZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiU0VMRUNUIGNvdW50KCopIEZS T00gcGdfcHJlcGFyZWRfeGFjdHM7Iik7Ci1pcygkcmVzdWx0LCBxcSgwKSwgJ3RyYW5zYWN0aW9u IGlzIGNvbW1pdHRlZCBvbiBzdWJzY3JpYmVyJyk7Cit0ZXN0X3N0cmVhbWluZygkbm9kZV9wdWJs aXNoZXIsICRub2RlX3N1YnNjcmliZXIsICRhcHBuYW1lLCAxKTsKIAogIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIwogIyBjaGVjayBhbGwgdGhlIGNsZWFudXAKZGlmZiAtLWdpdCBhL3Ny Yy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVk ZWZzLmxpc3QKaW5kZXggNTBkODZjYjAxYi4uMjNiYWZlYzVmNyAxMDA2NDQKLS0tIGEvc3JjL3Rv b2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVk ZWZzLmxpc3QKQEAgLTE0NzMsNiArMTQ3Myw3IEBAIExvZ2ljYWxSZXBSZWxJZAogTG9naWNhbFJl cFJlbE1hcEVudHJ5CiBMb2dpY2FsUmVwUmVsYXRpb24KIExvZ2ljYWxSZXBSb2xsYmFja1ByZXBh cmVkVHhuRGF0YQorTG9naWNhbFJlcFN0cmVhbUFib3J0RGF0YQogTG9naWNhbFJlcFR1cGxlRGF0 YQogTG9naWNhbFJlcFR5cAogTG9naWNhbFJlcFdvcmtlcgpAQCAtMTg3Niw2ICsxODc3LDkgQEAg UGFnZVhMb2dSZWNQdHIKIFBhZ2V0YWJsZUVudHJ5CiBQYWlycwogUGFyYWxsZWxBcHBlbmRTdGF0 ZQorUGFyYWxsZWxBcHBseVdvcmtlckVudHJ5CitQYXJhbGxlbEFwcGx5V29ya2VySW5mbworUGFy YWxsZWxBcHBseVdvcmtlclNoYXJlZAogUGFyYWxsZWxCaXRtYXBIZWFwU3RhdGUKIFBhcmFsbGVs QmxvY2tUYWJsZVNjYW5EZXNjCiBQYXJhbGxlbEJsb2NrVGFibGVTY2FuV29ya2VyCkBAIC0xODk1 LDYgKzE4OTksNyBAQCBQYXJhbGxlbFNsb3RSZXN1bHRIYW5kbGVyCiBQYXJhbGxlbFN0YXRlCiBQ YXJhbGxlbFRhYmxlU2NhbkRlc2MKIFBhcmFsbGVsVGFibGVTY2FuRGVzY0RhdGEKK1BhcmFsbGVs VHJhbnNTdGF0ZQogUGFyYWxsZWxWYWN1dW1TdGF0ZQogUGFyYWxsZWxXb3JrZXJDb250ZXh0CiBQ YXJhbGxlbFdvcmtlckluZm8KQEAgLTE5MjQsNiArMTkyOSw3IEBAIFBhcnNlclN0YXRlCiBQYXJ0 Q2xhdXNlSW5mbwogUGFydENsYXVzZU1hdGNoU3RhdHVzCiBQYXJ0Q2xhdXNlVGFyZ2V0CitQYXJ0 aWFsRmlsZVNldFN0YXRlCiBQYXJ0aXRpb25Cb3VuZEluZm8KIFBhcnRpdGlvbkJvdW5kSW5mb0Rh dGEKIFBhcnRpdGlvbkJvdW5kU3BlYwpAQCAtMjc3NCw2ICsyNzgwLDcgQEAgVG9jRW50cnkKIFRv a2VuQXV4RGF0YQogVG9rZW5pemVkQXV0aExpbmUKIFRyYWNrSXRlbQorVHJhbnNBcHBseUFjdGlv bgogVHJhbnNJbnZhbGlkYXRpb25JbmZvCiBUcmFuc1N0YXRlCiBUcmFuc2FjdGlvbklkCi0tIAoy LjIzLjAud2luZG93cy4xCgo= --_006_OS0PR01MB5716C2CC59810717EC9601EE94FA9OS0PR01MB5716jpnp_ Content-Type: application/octet-stream; name="v74-0002-Add-GUC-stream_serialize_threshold-and-test-seri.patch" Content-Description: v74-0002-Add-GUC-stream_serialize_threshold-and-test-seri.patch Content-Disposition: attachment; filename="v74-0002-Add-GUC-stream_serialize_threshold-and-test-seri.patch"; size=12715; creation-date="Thu, 05 Jan 2023 03:36:34 GMT"; modification-date="Thu, 05 Jan 2023 03:37:43 GMT" Content-Transfer-Encoding: base64 RnJvbSBjYWFhZjk3ZWExNTFmYjFhYTFmY2I3NGM2OWZkZjE2MDdlNTU0OGFlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IEthcGlsYSA8YWthcGlsYUBwb3N0Z3Jlc3FsLm9yZz4K RGF0ZTogTW9uLCAyIEphbiAyMDIzIDE1OjM3OjI1ICswNTMwClN1YmplY3Q6IFtQQVRDSCB2NzQg Mi81XSBBZGQgR1VDIHN0cmVhbV9zZXJpYWxpemVfdGhyZXNob2xkIGFuZCB0ZXN0CiBzZXJpYWxp emluZyBtZXNzYWdlcyB0byBkaXNrLgoKLS0tCiBkb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwgICAg ICAgICAgICAgICAgICAgICAgfCAgMzIgKysrKwogLi4uL3JlcGxpY2F0aW9uL2xvZ2ljYWwvYXBw bHlwYXJhbGxlbHdvcmtlci5jIHwgIDEyICsrCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL3dvcmtlci5jICAgICAgfCAgIDkgKysKIHNyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3Rh Ymxlcy5jICAgICAgICAgICB8ICAxNCArKwogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vd29ya2Vy X2ludGVybmFsLmggICAgIHwgICA0ICsKIHNyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAxNV9zdHJl YW0ucGwgICAgICAgICB8IDE0NCArKysrKysrKysrKysrKysrKy0KIDYgZmlsZXMgY2hhbmdlZCwg MjEyIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9z Z21sL2NvbmZpZy5zZ21sIGIvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sCmluZGV4IGEzM2E5MzU3 MGIuLjY2OWJhYmY3ZWIgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbAorKysg Yi9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwKQEAgLTExNjUwLDYgKzExNjUwLDM4IEBAIExPRzog IENsZWFuVXBMb2NrOiBkZWxldGluZzogbG9jaygweGI3YWNkODQ0KSBpZCgyNDY4OCwyNDY5Niww LDAsMCwxKQogICAgICAgPC9saXN0aXRlbT4KICAgICAgPC92YXJsaXN0ZW50cnk+CiAKKyAgICAg PHZhcmxpc3RlbnRyeSBpZD0iZ3VjLXN0cmVhbS1zZXJpYWxpemUtdGhyZXNob2xkIiB4cmVmbGFi ZWw9InN0cmVhbV9zZXJpYWxpemVfdGhyZXNob2xkIj4KKyAgICAgIDx0ZXJtPjx2YXJuYW1lPnN0 cmVhbV9zZXJpYWxpemVfdGhyZXNob2xkPC92YXJuYW1lPiAoPHR5cGU+aW50ZWdlcjwvdHlwZT4p CisgICAgICA8aW5kZXh0ZXJtPgorICAgICAgIDxwcmltYXJ5Pjx2YXJuYW1lPnN0cmVhbV9zZXJp YWxpemVfdGhyZXNob2xkPC92YXJuYW1lPiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcjwvcHJpbWFy eT4KKyAgICAgIDwvaW5kZXh0ZXJtPgorICAgICAgPC90ZXJtPgorICAgICAgPGxpc3RpdGVtPgor ICAgICAgIDxwYXJhPgorICAgICAgICBGb3JjZXMgdGhlIGxlYWRlciBhcHBseSB3b3JrZXIgdG8g c2VyaWFsaXplIG1lc3NhZ2VzIHRvIGZpbGVzIGFmdGVyCisgICAgICAgIHNlbmRpbmcgc3BlY2lm aWVkIGFtb3VudCBvZiBzdHJlYW1pbmcgY2h1bmtzIHRvIHRoZSBwYXJhbGxlbCBhcHBseQorICAg ICAgICB3b3JrZXIuIFNldHRpbmcgdGhpcyB0byB6ZXJvIHNlcmlhbGl6ZSBhbGwgbWVzc2FnZXMu IEEgdmFsdWUgb2YKKyAgICAgICAgPGxpdGVyYWw+LTE8L2xpdGVyYWw+ICh0aGUgZGVmYXVsdCkg ZGlzYWJsZXMgdGhpcyBmZWF0dXJlLiBUaGlzIGlzCisgICAgICAgIGludGVuZGVkIHRvIHRlc3Qg c2VyaWFsaXphdGlvbiB0byBmaWxlcyB3aXRoCisgICAgICAgIDxsaXRlcmFsPnN0cmVhbWluZyA9 IHBhcmFsbGVsPC9saXRlcmFsPi4KKyAgICAgICA8L3BhcmE+CisKKyAgICAgICA8cGFyYT4KKyAg ICAgICAgV2hlbiBsb2dpY2FsIHJlcGxpY2F0aW9uIHN1YnNjcmlwdGlvbiA8bGl0ZXJhbD5zdHJl YW1pbmc8L2xpdGVyYWw+CisgICAgICAgIHBhcmFtZXRlciBpcyBzZXQgdG8gPGxpdGVyYWw+cGFy YWxsZWw8L2xpdGVyYWw+LCB0aGUgbGVhZGVyIGFwcGx5IHdvcmtlcgorICAgICAgICBzZW5kcyBt ZXNzYWdlcyB0byBwYXJhbGxlbCB3b3JrZXJzIHdpdGggYSB0aW1lb3V0LiBCeSBkZWZhdWx0LCB0 aGUKKyAgICAgICAgbGVhZGVyIGFwcGx5IHdvcmtlciB3aWxsIHNlcmlhbGl6ZSB0aGUgcmVtYWlu aW5nIG1lc3NhZ2VzIHRvIGZpbGVzIGlmCisgICAgICAgIHRoZSB0aW1lb3V0IGlzIGV4Y2VlZGVk LiBJZiB0aGlzIG9wdGlvbiBpcyBzZXQgdG8gYW55IHZhbHVlIG90aGVyIHRoYW4KKyAgICAgICAg PGxpdGVyYWw+LTE8L2xpdGVyYWw+LCBzZXJpYWxpemUgdG8gZmlsZXMgZXZlbiB3aXRob3V0IHRp bWVvdXQuCisgICAgICAgPC9wYXJhPgorCisgICAgICAgPHBhcmE+CisgICAgICAgIFRoaXMgcGFy YW1ldGVyIGNhbiBvbmx5IGJlIHNldCBpbiB0aGUgPGZpbGVuYW1lPnBvc3RncmVzcWwuY29uZjwv ZmlsZW5hbWU+CisgICAgICAgIGZpbGUgb3Igb24gdGhlIHNlcnZlciBjb21tYW5kIGxpbmUuCisg ICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgPC92YXJsaXN0ZW50cnk+CisK ICAgICA8L3ZhcmlhYmxlbGlzdD4KICAgPC9zZWN0MT4KICAgPHNlY3QxIGlkPSJydW50aW1lLWNv bmZpZy1zaG9ydCI+CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2Fs L2FwcGx5cGFyYWxsZWx3b3JrZXIuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwv YXBwbHlwYXJhbGxlbHdvcmtlci5jCmluZGV4IDIxNTU4NGNmYWUuLmMwMGFkNDQyMDcgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvYXBwbHlwYXJhbGxlbHdvcmtl ci5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvYXBwbHlwYXJhbGxlbHdv cmtlci5jCkBAIC0yNTQsNiArMjU0LDkgQEAgc3RhdGljIFBhcmFsbGVsQXBwbHlXb3JrZXJJbmZv ICpzdHJlYW1fYXBwbHlfd29ya2VyID0gTlVMTDsKIC8qIEEgbGlzdCB0byBtYWludGFpbiBzdWJ0 cmFuc2FjdGlvbnMsIGlmIGFueS4gKi8KIHN0YXRpYyBMaXN0ICpzdWJ4YWN0bGlzdCA9IE5JTDsK IAorLyogR1VDIHZhcmlhYmxlICovCitpbnQJCQlzdHJlYW1fc2VyaWFsaXplX3RocmVzaG9sZCA9 IC0xOworCiBzdGF0aWMgdm9pZCBwYV9mcmVlX3dvcmtlcl9pbmZvKFBhcmFsbGVsQXBwbHlXb3Jr ZXJJbmZvICp3aW5mbyk7CiBzdGF0aWMgUGFyYWxsZWxUcmFuc1N0YXRlIHBhX2dldF94YWN0X3N0 YXRlKFBhcmFsbGVsQXBwbHlXb3JrZXJTaGFyZWQgKndzaGFyZWQpOwogc3RhdGljIFBhcnRpYWxG aWxlU2V0U3RhdGUgcGFfZ2V0X2ZpbGVzZXRfc3RhdGUodm9pZCk7CkBAIC0xMTQxLDYgKzExNDQs MTUgQEAgcGFfc2VuZF9kYXRhKFBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICp3aW5mbywgU2l6ZSBu Ynl0ZXMsIGNvbnN0IHZvaWQgKmRhdGEpCiAJQXNzZXJ0KCFJc1RyYW5zYWN0aW9uU3RhdGUoKSk7 CiAJQXNzZXJ0KCF3aW5mby0+c2VyaWFsaXplX2NoYW5nZXMpOwogCisJLyogRm9yY2UgdG8gc2Vy aWFsaXplIG1lc3NhZ2VzIGlmIHN0cmVhbV9zZXJpYWxpemVfdGhyZXNob2xkIGlzIHJlYWNoZWQu ICovCisJaWYgKHN0cmVhbV9zZXJpYWxpemVfdGhyZXNob2xkICE9IC0xICYmCisJCShzdHJlYW1f c2VyaWFsaXplX3RocmVzaG9sZCA9PSAwIHx8CisJCSBzdHJlYW1fc2VyaWFsaXplX3RocmVzaG9s ZCA8IHBhcmFsbGVsX3N0cmVhbV9uY2h1bmtzKSkKKwl7CisJCXBhcmFsbGVsX3N0cmVhbV9uY2h1 bmtzID0gMDsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwogLyoKICAqIFRoaXMgdGltZW91dCBpcyBh IGJpdCBhcmJpdHJhcnkgYnV0IHRlc3RpbmcgcmV2ZWFsZWQgdGhhdCBpdCBpcyBzdWZmaWNpZW50 CiAgKiB0byBzZW5kIHRoZSBtZXNzYWdlIHVubGVzcyB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2Vy IGlzIHdhaXRpbmcgb24gc29tZQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24v bG9naWNhbC93b3JrZXIuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2Vy LmMKaW5kZXggMTk3NjdiNGRmYy4uZDYzNDFmOWQ2NSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9sb2dpY2FsL3dvcmtlci5jCkBAIC0zMjUsNiArMzI1LDEyIEBAIHN0YXRpYyBUcmFuc2FjdGlv bklkIHN0cmVhbV94aWQgPSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKICAqLwogc3RhdGljIHVpbnQz MiBwYXJhbGxlbF9zdHJlYW1fbmNoYW5nZXMgPSAwOwogCisvKgorICogVGhlIG51bWJlciBvZiBz dHJlYW1pbmcgY2h1bmtzIHNlbnQgYnkgbGVhZGVyIGFwcGx5IHdvcmtlciBkdXJpbmcgb25lCisg KiBzdHJlYW1lZCB0cmFuc2FjdGlvbi4gVGhpcyBpcyBvbmx5IHVzZWQgd2hlbiBzdHJlYW1fc2Vy aWFsaXplX3RocmVzaG9sZCA+IDAuCisgKi8KK3VpbnQzMgkJcGFyYWxsZWxfc3RyZWFtX25jaHVu a3MgPSAwOworCiAvKgogICogV2UgZW5hYmxlIHNraXBwaW5nIGFsbCBkYXRhIG1vZGlmaWNhdGlv biBjaGFuZ2VzIChJTlNFUlQsIFVQREFURSwgZXRjLikgZm9yCiAgKiB0aGUgc3Vic2NyaXB0aW9u IGlmIHRoZSByZW1vdGUgdHJhbnNhY3Rpb24ncyBmaW5pc2ggTFNOIG1hdGNoZXMgdGhlIHN1YnNr aXBsc24uCkBAIC0xNTE5LDYgKzE1MjUsOSBAQCBhcHBseV9oYW5kbGVfc3RyZWFtX3N0YXJ0KFN0 cmluZ0luZm8gcykKIAkJY2FzZSBUUkFOU19MRUFERVJfU0VORF9UT19QQVJBTExFTDoKIAkJCUFz c2VydCh3aW5mbyk7CiAKKwkJCWlmIChzdHJlYW1fc2VyaWFsaXplX3RocmVzaG9sZCA+IDApCisJ CQkJcGFyYWxsZWxfc3RyZWFtX25jaHVua3MrKzsKKwogCQkJLyoKIAkJCSAqIE9uY2Ugd2Ugc3Rh cnQgc2VyaWFsaXppbmcgdGhlIGNoYW5nZXMsIHRoZSBwYXJhbGxlbCBhcHBseQogCQkJICogd29y a2VyIHdpbGwgd2FpdCBmb3IgdGhlIGxlYWRlciB0byByZWxlYXNlIHRoZSBzdHJlYW0gbG9jawpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMgYi9zcmMvYmFj a2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYwppbmRleCA5MjU0NWI0OTU4Li4zMDJjZWI3OTBi IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYworKysgYi9z cmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYwpAQCAtNjEsNiArNjEsNyBAQAogI2lu Y2x1ZGUgInJlcGxpY2F0aW9uL2xvZ2ljYWxsYXVuY2hlci5oIgogI2luY2x1ZGUgInJlcGxpY2F0 aW9uL3Nsb3QuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9zeW5jcmVwLmgiCisjaW5jbHVkZSAi cmVwbGljYXRpb24vd29ya2VyX2ludGVybmFsLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9idWZtZ3Iu aCIKICNpbmNsdWRlICJzdG9yYWdlL2xhcmdlX29iamVjdC5oIgogI2luY2x1ZGUgInN0b3JhZ2Uv cGdfc2htZW0uaCIKQEAgLTMwMTQsNiArMzAxNSwxOSBAQCBzdHJ1Y3QgY29uZmlnX2ludCBDb25m aWd1cmVOYW1lc0ludFtdID0KIAkJTlVMTCwgTlVMTCwgTlVMTAogCX0sCiAKKwl7CisJCXsic3Ry ZWFtX3NlcmlhbGl6ZV90aHJlc2hvbGQiLCBQR0NfU0lHSFVQLCBERVZFTE9QRVJfT1BUSU9OUywK KwkJCWdldHRleHRfbm9vcCgiRm9yY2VzIHRoZSBsZWFkZXIgYXBwbHkgd29ya2VyIHRvIHNlcmlh bGl6ZSBtZXNzYWdlcyAiCisJCQkJCQkgInRvIGZpbGVzIGFmdGVyIHNlbmRpbmcgc3BlY2lmaWVk IGFtb3VudCBvZiBzdHJlYW1pbmcgIgorCQkJCQkJICJjaHVua3MgaW4gc3RyZWFtaW5nIHBhcmFs bGVsIG1vZGUuIiksCisJCQlnZXR0ZXh0X25vb3AoIkEgdmFsdWUgb2YgLTEgZGlzYWJsZXMgdGhp cyBmZWF0dXJlLiIpLAorCQkJR1VDX05PVF9JTl9TQU1QTEUKKwkJfSwKKwkJJnN0cmVhbV9zZXJp YWxpemVfdGhyZXNob2xkLAorCQktMSwgLTEsIElOVF9NQVgsCisJCU5VTEwsIE5VTEwsIE5VTEwK Kwl9LAorCiAJewogCQl7ImxvZ19yb3RhdGlvbl9hZ2UiLCBQR0NfU0lHSFVQLCBMT0dHSU5HX1dI RVJFLAogCQkJZ2V0dGV4dF9ub29wKCJTZXRzIHRoZSBhbW91bnQgb2YgdGltZSB0byB3YWl0IGJl Zm9yZSBmb3JjaW5nICIKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3dvcmtl cl9pbnRlcm5hbC5oIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vd29ya2VyX2ludGVybmFsLmgK aW5kZXggZGI4OTFlZWE4YS4uYTY4Mjc5MTQ5MCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVw bGljYXRpb24vd29ya2VyX2ludGVybmFsLmgKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24v d29ya2VyX2ludGVybmFsLmgKQEAgLTIyNSw2ICsyMjUsMTAgQEAgZXh0ZXJuIFBHRExMSU1QT1JU IExvZ2ljYWxSZXBXb3JrZXIgKk15TG9naWNhbFJlcFdvcmtlcjsKIAogZXh0ZXJuIFBHRExMSU1Q T1JUIGJvb2wgaW5fcmVtb3RlX3RyYW5zYWN0aW9uOwogCitleHRlcm4gUEdETExJTVBPUlQgaW50 IHN0cmVhbV9zZXJpYWxpemVfdGhyZXNob2xkOworCitleHRlcm4gUEdETExJTVBPUlQgdWludDMy IHBhcmFsbGVsX3N0cmVhbV9uY2h1bmtzOworCiBleHRlcm4gdm9pZCBsb2dpY2FscmVwX3dvcmtl cl9hdHRhY2goaW50IHNsb3QpOwogZXh0ZXJuIExvZ2ljYWxSZXBXb3JrZXIgKmxvZ2ljYWxyZXBf d29ya2VyX2ZpbmQoT2lkIHN1YmlkLCBPaWQgcmVsaWQsCiAJCQkJCQkJCQkJCQlib29sIG9ubHlf cnVubmluZyk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMTVfc3RyZWFt LnBsIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDE1X3N0cmVhbS5wbAppbmRleCA5MWU4YWE4 YzBhLi44M2Q2OTU2ZWU2IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMTVf c3RyZWFtLnBsCisrKyBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAxNV9zdHJlYW0ucGwKQEAg LTEzMywxMyArMTMzLDIwIEBAIHN1YiB0ZXN0X3N0cmVhbWluZwogIyBDcmVhdGUgcHVibGlzaGVy IG5vZGUKIG15ICRub2RlX3B1Ymxpc2hlciA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5l dygncHVibGlzaGVyJyk7CiAkbm9kZV9wdWJsaXNoZXItPmluaXQoYWxsb3dzX3N0cmVhbWluZyA9 PiAnbG9naWNhbCcpOwotJG5vZGVfcHVibGlzaGVyLT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5j b25mJywKLQknbG9naWNhbF9kZWNvZGluZ193b3JrX21lbSA9IDY0a0InKTsKKyRub2RlX3B1Ymxp c2hlci0+YXBwZW5kX2NvbmYoCisJJ3Bvc3RncmVzcWwuY29uZicsIHFxKAorbWF4X3ByZXBhcmVk X3RyYW5zYWN0aW9ucyA9IDEwCitsb2dpY2FsX2RlY29kaW5nX3dvcmtfbWVtID0gNjRrQgorKSk7 CiAkbm9kZV9wdWJsaXNoZXItPnN0YXJ0OwogCiAjIENyZWF0ZSBzdWJzY3JpYmVyIG5vZGUKIG15 ICRub2RlX3N1YnNjcmliZXIgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ3N1YnNj cmliZXInKTsKICRub2RlX3N1YnNjcmliZXItPmluaXQoYWxsb3dzX3N0cmVhbWluZyA9PiAnbG9n aWNhbCcpOworJG5vZGVfc3Vic2NyaWJlci0+YXBwZW5kX2NvbmYoCisJJ3Bvc3RncmVzcWwuY29u ZicsIHFxKAorbWF4X3ByZXBhcmVkX3RyYW5zYWN0aW9ucyA9IDEwCispKTsKICRub2RlX3N1YnNj cmliZXItPnN0YXJ0OwogCiAjIENyZWF0ZSBzb21lIHByZWV4aXN0aW5nIGNvbnRlbnQgb24gcHVi bGlzaGVyCkBAIC0xNzAsNyArMTc3LDcgQEAgbXkgJGFwcG5hbWUgPSAndGFwX3N1Yic7CiAjIFRl c3QgdXNpbmcgc3RyZWFtaW5nIG1vZGUgJ29uJwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMKICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJDUkVBVEUg U1VCU0NSSVBUSU9OIHRhcF9zdWIgQ09OTkVDVElPTiAnJHB1Ymxpc2hlcl9jb25uc3RyIGFwcGxp Y2F0aW9uX25hbWU9JGFwcG5hbWUnIFBVQkxJQ0FUSU9OIHRhcF9wdWIgV0lUSCAoc3RyZWFtaW5n ID0gb24pIgorCSJDUkVBVEUgU1VCU0NSSVBUSU9OIHRhcF9zdWIgQ09OTkVDVElPTiAnJHB1Ymxp c2hlcl9jb25uc3RyIGFwcGxpY2F0aW9uX25hbWU9JGFwcG5hbWUnIFBVQkxJQ0FUSU9OIHRhcF9w dWIgV0lUSCAoc3RyZWFtaW5nID0gb24sIHR3b19waGFzZSA9IG9uKSIKICk7CiAKICMgV2FpdCBm b3IgaW5pdGlhbCB0YWJsZSBzeW5jIHRvIGZpbmlzaApAQCAtMzEyLDYgKzMxOSwxMzcgQEAgJHJl c3VsdCA9CiAgICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNU IGNvdW50KCopIEZST00gdGVzdF90YWJfMiIpOwogaXMoJHJlc3VsdCwgcXEoMTAwMDApLCAnZGF0 YSByZXBsaWNhdGVkIHRvIHN1YnNjcmliZXIgYWZ0ZXIgZHJvcHBpbmcgaW5kZXgnKTsKIAorIyBD bGVhbiB1cCB0ZXN0IGRhdGEgZnJvbSB0aGUgZW52aXJvbm1lbnQuCiskbm9kZV9wdWJsaXNoZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiVFJVTkNBVEUgVEFCTEUgdGVzdF90YWJfMiIpOworJG5v ZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKKworIyBUZXN0IHNlcmlh bGl6aW5nIG1lc3NhZ2VzIHRvIGRpc2sKKworIyBTZXQgc3RyZWFtX3NlcmlhbGl6ZV90aHJlc2hv bGQgdG8gemVybywgc28gdGhlIG1lc3NhZ2VzIHdpbGwgYmUgc2VyaWFsaXplZCB0byBkaXNrLgor JG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJJ0FMVEVSIFNZU1RFTSBT RVQgc3RyZWFtX3NlcmlhbGl6ZV90aHJlc2hvbGQgPSAwOycpOworJG5vZGVfc3Vic2NyaWJlci0+ cmVsb2FkOworCisjIFJ1biBhIHF1ZXJ5IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSByZWxvYWQgaGFz IHRha2VuIGVmZmVjdC4KKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBx e1NFTEVDVCAxfSk7CisKKyMgU2VyaWFsaXplIHRoZSBDT01NSVQgdHJhbnNhY3Rpb24uCisjIENo ZWNrIHRoZSBzdWJzY3JpYmVyIGxvZyBmcm9tIG5vdyBvbi4KKyRvZmZzZXQgPSAtcyAkbm9kZV9z dWJzY3JpYmVyLT5sb2dmaWxlOworCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLAorCSJJTlNFUlQgSU5UTyB0ZXN0X3RhYl8yIFNFTEVDVCBpIEZST00gZ2VuZXJhdGVfc2Vy aWVzKDEsIDUwMDApIHMoaSkiKTsKKworIyBFbnN1cmUgdGhhdCB0aGUgbWVzc2FnZXMgYXJlIHNl cmlhbGl6ZWQuCiskbm9kZV9zdWJzY3JpYmVyLT53YWl0X2Zvcl9sb2coCisJcXIvREVCVUc6ICgg W0EtWjAtOV0rOik/IG9wZW5pbmcgZmlsZSAiLipcLmNoYW5nZXMiIGZvciBzdHJlYW1lZCBjaGFu Z2VzLywKKwkkb2Zmc2V0KTsKKworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRh cHBuYW1lKTsKKworIyBDaGVjayB0aGF0IHRyYW5zYWN0aW9uIGlzIGNvbW1pdHRlZCBvbiBzdWJz Y3JpYmVyCiskcmVzdWx0ID0KKyAgJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJTRUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0X3RhYl8yIik7CitpcygkcmVzdWx0LCBxcSg1 MDAwKSwKKwknZGF0YSByZXBsaWNhdGVkIHRvIHN1YnNjcmliZXIgYnkgc2VyaWFsaXppbmcgbWVz c2FnZXMgdG8gZGlzaycpOworCisjIENsZWFuIHVwIHRlc3QgZGF0YSBmcm9tIHRoZSBlbnZpcm9u bWVudC4KKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJUUlVOQ0FURSBU QUJMRSB0ZXN0X3RhYl8yIik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFw cG5hbWUpOworCisjIFNlcmlhbGl6ZSB0aGUgUFJFUEFSRSB0cmFuc2FjdGlvbi4KKyMgQ2hlY2sg dGhlIHN1YnNjcmliZXIgbG9nIGZyb20gbm93IG9uLgorJG9mZnNldCA9IC1zICRub2RlX3N1YnNj cmliZXItPmxvZ2ZpbGU7CisKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAorCSdwb3N0Z3Jl cycsIHF7CisJQkVHSU47CisJSU5TRVJUIElOVE8gdGVzdF90YWJfMiBTRUxFQ1QgaSBGUk9NIGdl bmVyYXRlX3NlcmllcygxLCA1MDAwKSBzKGkpOworCVBSRVBBUkUgVFJBTlNBQ1RJT04gJ3hhY3Qn OworCX0pOworCisjIEVuc3VyZSB0aGF0IHRoZSBtZXNzYWdlcyBhcmUgc2VyaWFsaXplZC4KKyRu b2RlX3N1YnNjcmliZXItPndhaXRfZm9yX2xvZygKKwlxci9ERUJVRzogKCBbQS1aMC05XSs6KT8g b3BlbmluZyBmaWxlICIuKlwuY2hhbmdlcyIgZm9yIHN0cmVhbWVkIGNoYW5nZXMvLAorCSRvZmZz ZXQpOworCiskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOworCisj IENoZWNrIHRoYXQgdHJhbnNhY3Rpb24gaXMgaW4gcHJlcGFyZWQgc3RhdGUgb24gc3Vic2NyaWJl cgorJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJT RUxFQ1QgY291bnQoKikgRlJPTSBwZ19wcmVwYXJlZF94YWN0czsiKTsKK2lzKCRyZXN1bHQsIHFx KDEpLCAndHJhbnNhY3Rpb24gaXMgcHJlcGFyZWQgb24gc3Vic2NyaWJlcicpOworCisjIENoZWNr IHRoYXQgMlBDIGdldHMgY29tbWl0dGVkIG9uIHN1YnNjcmliZXIKKyRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDT01NSVQgUFJFUEFSRUQgJ3hhY3QnOyIpOworCiskbm9k ZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOworCisjIENoZWNrIHRoYXQg dHJhbnNhY3Rpb24gaXMgY29tbWl0dGVkIG9uIHN1YnNjcmliZXIKKyRyZXN1bHQgPQorICAkbm9k ZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBGUk9N IHRlc3RfdGFiXzIiKTsKK2lzKCRyZXN1bHQsIHFxKDUwMDApLAorCSdkYXRhIHJlcGxpY2F0ZWQg dG8gc3Vic2NyaWJlciBieSBzZXJpYWxpemluZyBtZXNzYWdlcyB0byBkaXNrJyk7CisKKyMgQ2xl YW4gdXAgdGVzdCBkYXRhIGZyb20gdGhlIGVudmlyb25tZW50LgorJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIlRSVU5DQVRFIFRBQkxFIHRlc3RfdGFiXzIiKTsKKyRub2Rl X3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7CisKKyMgU2VyaWFsaXplIHRo ZSBBQk9SVCB0b3AtdHJhbnNhY3Rpb24uCisjIENoZWNrIHRoZSBzdWJzY3JpYmVyIGxvZyBmcm9t IG5vdyBvbi4KKyRvZmZzZXQgPSAtcyAkbm9kZV9zdWJzY3JpYmVyLT5sb2dmaWxlOworCiskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKKwkncG9zdGdyZXMnLCBxeworCUJFR0lOOworCUlOU0VS VCBJTlRPIHRlc3RfdGFiXzIgU0VMRUNUIGkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgNTAwMCkg cyhpKTsKKwlST0xMQkFDSzsKKwl9KTsKKworIyBFbnN1cmUgdGhhdCB0aGUgbWVzc2FnZXMgYXJl IHNlcmlhbGl6ZWQuCiskbm9kZV9zdWJzY3JpYmVyLT53YWl0X2Zvcl9sb2coCisJcXIvREVCVUc6 ICggW0EtWjAtOV0rOik/IG9wZW5pbmcgZmlsZSAiLipcLmNoYW5nZXMiIGZvciBzdHJlYW1lZCBj aGFuZ2VzLywKKwkkb2Zmc2V0KTsKKworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVw KCRhcHBuYW1lKTsKKworIyBDaGVjayB0aGF0IHRyYW5zYWN0aW9uIGlzIGFib3J0ZWQgb24gc3Vi c2NyaWJlcgorJHJlc3VsdCA9CisgICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiU0VMRUNUIGNvdW50KCopIEZST00gdGVzdF90YWJfMiIpOworaXMoJHJlc3VsdCwgcXEo MCksCisJJ2RhdGEgcmVwbGljYXRlZCB0byBzdWJzY3JpYmVyIGJ5IHNlcmlhbGl6aW5nIG1lc3Nh Z2VzIHRvIGRpc2snKTsKKworIyBDbGVhbiB1cCB0ZXN0IGRhdGEgZnJvbSB0aGUgZW52aXJvbm1l bnQuCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiVFJVTkNBVEUgVEFC TEUgdGVzdF90YWJfMiIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBu YW1lKTsKKworIyBTZXJpYWxpemUgdGhlIEFCT1JUIHN1Yi10cmFuc2FjdGlvbi4KKyMgQ2hlY2sg dGhlIHN1YnNjcmliZXIgbG9nIGZyb20gbm93IG9uLgorJG9mZnNldCA9IC1zICRub2RlX3N1YnNj cmliZXItPmxvZ2ZpbGU7CisKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAorCSdwb3N0Z3Jl cycsIHF7CisJQkVHSU47CisJSU5TRVJUIElOVE8gdGVzdF90YWJfMiBTRUxFQ1QgaSBGUk9NIGdl bmVyYXRlX3NlcmllcygxLCA1MDAwKSBzKGkpOworCVNBVkVQT0lOVCBzcDsKKwlJTlNFUlQgSU5U TyB0ZXN0X3RhYl8yIFNFTEVDVCBpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDUwMDEsIDEwMDAwKSBz KGkpOworCVJPTExCQUNLIFRPIHNwOworCUNPTU1JVDsKKwl9KTsKKworIyBFbnN1cmUgdGhhdCB0 aGUgbWVzc2FnZXMgYXJlIHNlcmlhbGl6ZWQuCiskbm9kZV9zdWJzY3JpYmVyLT53YWl0X2Zvcl9s b2coCisJcXIvREVCVUc6ICggW0EtWjAtOV0rOik/IG9wZW5pbmcgZmlsZSAiLipcLmNoYW5nZXMi IGZvciBzdHJlYW1lZCBjaGFuZ2VzLywKKwkkb2Zmc2V0KTsKKworJG5vZGVfcHVibGlzaGVyLT53 YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKKworIyBDaGVjayB0aGF0IG9ubHkgc3ViLXRyYW5z YWN0aW9uIGlzIGFib3J0ZWQgb24gc3Vic2NyaWJlci4KKyRyZXN1bHQgPQorICAkbm9kZV9zdWJz Y3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBGUk9NIHRlc3Rf dGFiXzIiKTsKK2lzKCRyZXN1bHQsIHFxKDUwMDApLAorCSdkYXRhIHJlcGxpY2F0ZWQgdG8gc3Vi c2NyaWJlciBieSBzZXJpYWxpemluZyBtZXNzYWdlcyB0byBkaXNrJyk7CisKICRub2RlX3N1YnNj cmliZXItPnN0b3A7CiAkbm9kZV9wdWJsaXNoZXItPnN0b3A7CiAKLS0gCjIuMjMuMC53aW5kb3dz LjEKCg== --_006_OS0PR01MB5716C2CC59810717EC9601EE94FA9OS0PR01MB5716jpnp_ Content-Type: application/octet-stream; name="v74-0003-Stop-extra-worker-if-GUC-was-changed.patch" Content-Description: v74-0003-Stop-extra-worker-if-GUC-was-changed.patch Content-Disposition: attachment; filename="v74-0003-Stop-extra-worker-if-GUC-was-changed.patch"; size=4230; creation-date="Thu, 05 Jan 2023 03:36:34 GMT"; modification-date="Thu, 05 Jan 2023 03:37:43 GMT" Content-Transfer-Encoding: base64 RnJvbSAxNmJhMjlmN2I3ZDcwMmQxZDQxZGIzZDljMWYwYWM2ZmFhYTNlODkwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBzaGVybG9ja2NwcCA8c2hlcmxvY2tjcHBAZm94bWFpbC5jb20+ CkRhdGU6IFNhdCwgMTcgRGVjIDIwMjIgMjA6NDM6MjEgKzA4MDAKU3ViamVjdDogW1BBVENIIHY3 NCAzLzVdIFN0b3AgZXh0cmEgd29ya2VyIGlmIEdVQyB3YXMgY2hhbmdlZAoKSWYgdGhlIG1heF9w YXJhbGxlbF9hcHBseV93b3JrZXJzX3Blcl9zdWJzY3JpcHRpb24gaXMgY2hhbmdlZCB0byBhCmxv d2VyIHZhbHVlLCB0cnkgdG8gc3RvcCBmcmVlIHdvcmtlcnMgaW4gdGhlIHBvb2wgdG8ga2VlcCB0 aGUgbnVtYmVyIG9mCndvcmtlcnMgbG93ZXIgdGhhbiBoYWxmIG9mIHRoZSBtYXhfcGFyYWxsZWxf YXBwbHlfd29ya2Vyc19wZXJfc3Vic2NyaXB0aW9uCi0tLQogLi4uL3JlcGxpY2F0aW9uL2xvZ2lj YWwvYXBwbHlwYXJhbGxlbHdvcmtlci5jIHwgNjAgKysrKysrKysrKysrKysrLS0tLQogc3JjL2Jh Y2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYyAgICAgIHwgIDcgKysrCiBzcmMvaW5j bHVkZS9yZXBsaWNhdGlvbi93b3JrZXJfaW50ZXJuYWwuaCAgICAgfCAgMSArCiAzIGZpbGVzIGNo YW5nZWQsIDU3IGluc2VydGlvbnMoKyksIDExIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvYXBwbHlwYXJhbGxlbHdvcmtlci5jIGIvc3Jj L2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9hcHBseXBhcmFsbGVsd29ya2VyLmMKaW5kZXgg YzAwYWQ0NDIwNy4uNGUyNGRmMDkzNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vbG9naWNhbC9hcHBseXBhcmFsbGVsd29ya2VyLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vbG9naWNhbC9hcHBseXBhcmFsbGVsd29ya2VyLmMKQEAgLTU0MCw2ICs1NDAsMjUgQEAg cGFfZmluZF93b3JrZXIoVHJhbnNhY3Rpb25JZCB4aWQpCiAJcmV0dXJuIE5VTEw7CiB9CiAKKy8q CisgKiBTdG9wIHRoZSBnaXZlbiBwYXJhbGxlbCBhcHBseSB3b3JrZXIgYW5kIGZyZWUgdGhlIGNv cnJlc3BvbmRpbmcgaW5mby4KKyAqLworc3RhdGljIHZvaWQKK3BhX3N0b3Bfd29ya2VyKFBhcmFs bGVsQXBwbHlXb3JrZXJJbmZvICp3aW5mbykKK3sKKwlpbnQJCQlzbG90X25vOworCXVpbnQxNgkJ Z2VuZXJhdGlvbjsKKworCVNwaW5Mb2NrQWNxdWlyZSgmd2luZm8tPnNoYXJlZC0+bXV0ZXgpOwor CWdlbmVyYXRpb24gPSB3aW5mby0+c2hhcmVkLT5sb2dpY2FscmVwX3dvcmtlcl9nZW5lcmF0aW9u OworCXNsb3Rfbm8gPSB3aW5mby0+c2hhcmVkLT5sb2dpY2FscmVwX3dvcmtlcl9zbG90X25vOwor CVNwaW5Mb2NrUmVsZWFzZSgmd2luZm8tPnNoYXJlZC0+bXV0ZXgpOworCisJbG9naWNhbHJlcF9w YV93b3JrZXJfc3RvcChzbG90X25vLCBnZW5lcmF0aW9uKTsKKworCXBhX2ZyZWVfd29ya2VyX2lu Zm8od2luZm8pOworfQorCiAvKgogICogTWFrZXMgdGhlIHdvcmtlciBhdmFpbGFibGUgZm9yIHJl dXNlLgogICoKQEAgLTU3NSwyMyArNTk0LDQyIEBAIHBhX2ZyZWVfd29ya2VyKFBhcmFsbGVsQXBw bHlXb3JrZXJJbmZvICp3aW5mbykKIAkJbGlzdF9sZW5ndGgoUGFyYWxsZWxBcHBseVdvcmtlclBv b2wpID4KIAkJKG1heF9wYXJhbGxlbF9hcHBseV93b3JrZXJzX3Blcl9zdWJzY3JpcHRpb24gLyAy KSkKIAl7Ci0JCWludAkJCXNsb3Rfbm87Ci0JCXVpbnQxNgkJZ2VuZXJhdGlvbjsKLQotCQlTcGlu TG9ja0FjcXVpcmUoJndpbmZvLT5zaGFyZWQtPm11dGV4KTsKLQkJZ2VuZXJhdGlvbiA9IHdpbmZv LT5zaGFyZWQtPmxvZ2ljYWxyZXBfd29ya2VyX2dlbmVyYXRpb247Ci0JCXNsb3Rfbm8gPSB3aW5m by0+c2hhcmVkLT5sb2dpY2FscmVwX3dvcmtlcl9zbG90X25vOwotCQlTcGluTG9ja1JlbGVhc2Uo JndpbmZvLT5zaGFyZWQtPm11dGV4KTsKKwkJcGFfc3RvcF93b3JrZXIod2luZm8pOworCQlyZXR1 cm47CisJfQogCi0JCWxvZ2ljYWxyZXBfcGFfd29ya2VyX3N0b3Aoc2xvdF9ubywgZ2VuZXJhdGlv bik7CisJd2luZm8tPmluX3VzZSA9IGZhbHNlOworCXdpbmZvLT5zZXJpYWxpemVfY2hhbmdlcyA9 IGZhbHNlOworfQogCi0JCXBhX2ZyZWVfd29ya2VyX2luZm8od2luZm8pOworLyoKKyAqIFRyeSB0 byBzdG9wIHBhcmFsbGVsIGFwcGx5IHdvcmtlcnMgdGhhdCBhcmUgbm90IGluIHVzZSB0byBrZWVw IHRoZSBudW1iZXIgb2YKKyAqIHdvcmtlcnMgbG93ZXIgdGhhbiBoYWxmIG9mIHRoZSBtYXhfcGFy YWxsZWxfYXBwbHlfd29ya2Vyc19wZXJfc3Vic2NyaXB0aW9uLgorICovCit2b2lkCitwYV9zdG9w X2lkbGVfd29ya2Vycyh2b2lkKQoreworCUxpc3QJICAgKmFjdGl2ZV93b3JrZXJzOworCUxpc3RD ZWxsICAgKmxjOworCWludAkJCW1heF9hcHBseXdvcmtlcnMgPSBtYXhfcGFyYWxsZWxfYXBwbHlf d29ya2Vyc19wZXJfc3Vic2NyaXB0aW9uIC8gMjsKIAorCWlmIChsaXN0X2xlbmd0aChQYXJhbGxl bEFwcGx5V29ya2VyUG9vbCkgPD0gbWF4X2FwcGx5d29ya2VycykKIAkJcmV0dXJuOworCisJYWN0 aXZlX3dvcmtlcnMgPSBsaXN0X2NvcHkoUGFyYWxsZWxBcHBseVdvcmtlclBvb2wpOworCisJZm9y ZWFjaChsYywgYWN0aXZlX3dvcmtlcnMpCisJeworCQlQYXJhbGxlbEFwcGx5V29ya2VySW5mbyAq d2luZm8gPSAoUGFyYWxsZWxBcHBseVdvcmtlckluZm8gKikgbGZpcnN0KGxjKTsKKworCQlwYV9z dG9wX3dvcmtlcih3aW5mbyk7CisKKwkJLyogUmVjaGVjayB0aGUgbnVtYmVyIG9mIHdvcmtlcnMu ICovCisJCWlmIChsaXN0X2xlbmd0aChQYXJhbGxlbEFwcGx5V29ya2VyUG9vbCkgPD0gbWF4X2Fw cGx5d29ya2VycykKKwkJCWJyZWFrOwogCX0KIAotCXdpbmZvLT5pbl91c2UgPSBmYWxzZTsKLQl3 aW5mby0+c2VyaWFsaXplX2NoYW5nZXMgPSBmYWxzZTsKKwlsaXN0X2ZyZWUoYWN0aXZlX3dvcmtl cnMpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNh bC93b3JrZXIuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMKaW5k ZXggZDYzNDFmOWQ2NS4uOTgyOTk2NGFkMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vbG9naWNhbC93b3JrZXIuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL3dvcmtlci5jCkBAIC0zNjM2LDYgKzM2MzYsMTMgQEAgTG9naWNhbFJlcEFwcGx5TG9vcChY TG9nUmVjUHRyIGxhc3RfcmVjZWl2ZWQpCiAJCXsKIAkJCUNvbmZpZ1JlbG9hZFBlbmRpbmcgPSBm YWxzZTsKIAkJCVByb2Nlc3NDb25maWdGaWxlKFBHQ19TSUdIVVApOworCisJCQkvKgorCQkJICog VHJ5IHRvIHN0b3AgZnJlZSB3b3JrZXJzIGluIHRoZSBwb29sIGluIGNhc2UgdGhlCisJCQkgKiBt YXhfcGFyYWxsZWxfYXBwbHlfd29ya2Vyc19wZXJfc3Vic2NyaXB0aW9uIGlzIGNoYW5nZWQgdG8g YQorCQkJICogbG93ZXIgdmFsdWUuCisJCQkgKi8KKwkJCXBhX3N0b3BfaWRsZV93b3JrZXJzKCk7 CiAJCX0KIAogCQlpZiAocmMgJiBXTF9USU1FT1VUKQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv cmVwbGljYXRpb24vd29ya2VyX2ludGVybmFsLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93 b3JrZXJfaW50ZXJuYWwuaAppbmRleCBhNjgyNzkxNDkwLi5mM2IyZjJkZTMxIDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93b3JrZXJfaW50ZXJuYWwuaAorKysgYi9zcmMvaW5j bHVkZS9yZXBsaWNhdGlvbi93b3JrZXJfaW50ZXJuYWwuaApAQCAtMjc4LDYgKzI3OCw3IEBAIGV4 dGVybiB2b2lkIHNldF9hcHBseV9lcnJvcl9jb250ZXh0X29yaWdpbihjaGFyICpvcmlnaW5uYW1l KTsKIC8qIFBhcmFsbGVsIGFwcGx5IHdvcmtlciBzZXR1cCBhbmQgaW50ZXJhY3Rpb25zICovCiBl eHRlcm4gdm9pZCBwYV9hbGxvY2F0ZV93b3JrZXIoVHJhbnNhY3Rpb25JZCB4aWQpOwogZXh0ZXJu IFBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICpwYV9maW5kX3dvcmtlcihUcmFuc2FjdGlvbklkIHhp ZCk7CitleHRlcm4gdm9pZCBwYV9zdG9wX2lkbGVfd29ya2Vycyh2b2lkKTsKIGV4dGVybiB2b2lk IHBhX2RldGFjaF9hbGxfZXJyb3JfbXEodm9pZCk7CiAKIGV4dGVybiBib29sIHBhX3NlbmRfZGF0 YShQYXJhbGxlbEFwcGx5V29ya2VySW5mbyAqd2luZm8sIFNpemUgbmJ5dGVzLAotLSAKMi4yMy4w LndpbmRvd3MuMQoK --_006_OS0PR01MB5716C2CC59810717EC9601EE94FA9OS0PR01MB5716jpnp_ Content-Type: application/octet-stream; name="v74-0004-Retry-to-apply-streaming-xact-only-in-apply-work.patch" Content-Description: v74-0004-Retry-to-apply-streaming-xact-only-in-apply-work.patch Content-Disposition: attachment; filename="v74-0004-Retry-to-apply-streaming-xact-only-in-apply-work.patch"; size=21643; creation-date="Thu, 05 Jan 2023 03:36:34 GMT"; modification-date="Thu, 05 Jan 2023 03:37:44 GMT" Content-Transfer-Encoding: base64 RnJvbSBhYmM2OGQ5ZWEyZWJiNzg3NDQ0MjI2NzY5MWI2MTUzNmY5MDg2NWYzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBIb3UgWmhpamllIDxob3V6ai5mbnN0QGNuLmZ1aml0c3UuY29t PgpEYXRlOiBTdW4sIDExIERlYyAyMDIyIDE5OjE2OjM0ICswODAwClN1YmplY3Q6IFtQQVRDSCB2 NzQgNC81XSBSZXRyeSB0byBhcHBseSBzdHJlYW1pbmcgeGFjdCBvbmx5IGluIGFwcGx5IHdvcmtl cgoKV2hlbiB0aGUgc3Vic2NyaXB0aW9uIHBhcmFtZXRlciBpcyBzZXQgc3RyZWFtaW5nPXBhcmFs bGVsLCB0aGUgbG9naWMgdHJpZXMgdG8KYXBwbHkgdGhlIHN0cmVhbWluZyB0cmFuc2FjdGlvbiB1 c2luZyBhIHBhcmFsbGVsIGFwcGx5IHdvcmtlci4gSWYgdGhpcwpmYWlscyB0aGUgcGFyYWxsZWwg d29ya2VyIGV4aXRzIHdpdGggYW4gZXJyb3IuCgpJbiB0aGlzIGNhc2UsIHJldHJ5IGFwcGx5aW5n IHRoZSBzdHJlYW1pbmcgdHJhbnNhY3Rpb24gdXNpbmcgdGhlIG5vcm1hbApzdHJlYW1pbmc9b24g bW9kZS4gVGhpcyBpcyBkb25lIHRvIGF2b2lkIGdldHRpbmcgY2F1Z2h0IGluIGEgbG9vcCBvZiB0 aGUgc2FtZQpyZXRyeSBlcnJvcnMuCgpBIG5ldyBmbGFnIGZpZWxkICJzdWJyZXRyeSIgaGFzIGJl ZW4gaW50cm9kdWNlZCB0byBjYXRhbG9nICJwZ19zdWJzY3JpcHRpb24iLgpJZiB0aGVyZSBhcmUg YW55IGFjdGl2ZSBwYXJhbGxlbCBhcHBseSB3b3JrZXJzIGFuZCB0aGUgc3Vic2NyaWJlciBleGl0 cyB3aXRoIGFuCmVycm9yLCB0aGlzIGZsYWcgd2lsbCBiZSBzZXQgdHJ1ZSwgYW5kIHdoZW5ldmVy IHRoZSB0cmFuc2FjdGlvbiBpcyBhcHBsaWVkCnN1Y2Nlc3NmdWxseSwgdGhpcyBmbGFnIGlzIHJl c2V0IGZhbHNlLgpOb3csIHdoZW4gZGVjaWRpbmcgaG93IHRvIGFwcGx5IGEgc3RyZWFtaW5nIHRy YW5zYWN0aW9uLCB0aGUgbG9naWMgY2FuIGtub3cgaWYKdGhpcyB0cmFuc2FjdGlvbiBoYXMgcHJl dmlvdXNseSBmYWlsZWQgb3Igbm90IChieSBjaGVja2luZyB0aGUgInN1YnJldHJ5IgpmaWVsZCku CgpOb3RlOiBTaW5jZSB3ZSBhZGQgYSBuZXcgZmllbGQgJ3N1YnJldHJ5JyB0byBjYXRhbG9nICdw Z19zdWJzY3JpcHRpb24nIGhhcyBiZWVuCmV4cGFuZGVkLCB3ZSBuZWVkIGJ1bXAgY2F0YWxvZyB2 ZXJzaW9uLgotLS0KIGRvYy9zcmMvc2dtbC9jYXRhbG9ncy5zZ21sICAgICAgICAgICAgICAgICAg ICB8ICAxMCArCiBkb2Mvc3JjL3NnbWwvbG9naWNhbC1yZXBsaWNhdGlvbi5zZ21sICAgICAgICAg fCAgMTEgKy0KIGRvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3N1YnNjcmlwdGlvbi5zZ21sICAgICB8 ICAgNSArCiBzcmMvYmFja2VuZC9jYXRhbG9nL3BnX3N1YnNjcmlwdGlvbi5jICAgICAgICAgfCAg IDEgKwogc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fdmlld3Muc3FsICAgICAgICAgIHwgICAy ICstCiBzcmMvYmFja2VuZC9jb21tYW5kcy9zdWJzY3JpcHRpb25jbWRzLmMgICAgICAgfCAgIDEg KwogLi4uL3JlcGxpY2F0aW9uL2xvZ2ljYWwvYXBwbHlwYXJhbGxlbHdvcmtlci5jIHwgIDMwICsr Kwogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYyAgICAgIHwgMTgyICsr KysrKysrKysrKystLS0tLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYyAgICAgICAgICAgICAg ICAgICAgIHwgICA1ICstCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3N1YnNjcmlwdGlvbi5oICAg ICAgICAgfCAgIDcgKwogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vd29ya2VyX2ludGVybmFsLmgg ICAgIHwgICAyICsKIHNyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAxNV9zdHJlYW0ucGwgICAgICAg ICB8ICA2MyArKysrKysKIDEyIGZpbGVzIGNoYW5nZWQsIDI2MyBpbnNlcnRpb25zKCspLCA1NiBk ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvY2F0YWxvZ3Muc2dtbCBiL2Rv Yy9zcmMvc2dtbC9jYXRhbG9ncy5zZ21sCmluZGV4IGMxZTQwNDgwNTQuLmQ5MTgzMjdlYzIgMTAw NjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9jYXRhbG9ncy5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9j YXRhbG9ncy5zZ21sCkBAIC03OTQ4LDYgKzc5NDgsMTYgQEAgU0NSQU0tU0hBLTI1NiQ8cmVwbGFj ZWFibGU+Jmx0O2l0ZXJhdGlvbiBjb3VudCZndDs8L3JlcGxhY2VhYmxlPjo8cmVwbGFjZWFibGU+ JmwKICAgICAgIDwvcGFyYT48L2VudHJ5PgogICAgICA8L3Jvdz4KIAorICAgICA8cm93PgorICAg ICAgPGVudHJ5IHJvbGU9ImNhdGFsb2dfdGFibGVfZW50cnkiPjxwYXJhIHJvbGU9ImNvbHVtbl9k ZWZpbml0aW9uIj4KKyAgICAgICA8c3RydWN0ZmllbGQ+c3VicmV0cnk8L3N0cnVjdGZpZWxkPiA8 dHlwZT5ib29sPC90eXBlPgorICAgICAgPC9wYXJhPgorICAgICAgPHBhcmE+CisgICAgICAgVHJ1 ZSBpZiBwcmV2aW91cyBjaGFuZ2UgZmFpbGVkIHRvIGJlIGFwcGxpZWQgd2hpbGUgdGhlcmUgd2Vy ZSBhbnkKKyAgICAgICBhY3RpdmUgcGFyYWxsZWwgYXBwbHkgd29ya2VycywgbmVjZXNzaXRhdGlu ZyBhIHJldHJ5LgorICAgICAgPC9wYXJhPjwvZW50cnk+CisgICAgIDwvcm93PgorCiAgICAgIDxy b3c+CiAgICAgICA8ZW50cnkgcm9sZT0iY2F0YWxvZ190YWJsZV9lbnRyeSI+PHBhcmEgcm9sZT0i Y29sdW1uX2RlZmluaXRpb24iPgogICAgICAgIDxzdHJ1Y3RmaWVsZD5zdWJjb25uaW5mbzwvc3Ry dWN0ZmllbGQ+IDx0eXBlPnRleHQ8L3R5cGU+CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvbG9n aWNhbC1yZXBsaWNhdGlvbi5zZ21sIGIvZG9jL3NyYy9zZ21sL2xvZ2ljYWwtcmVwbGljYXRpb24u c2dtbAppbmRleCA1NGY0OGJlODdmLi5jYjRmNWM2ZjE5IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3Nn bWwvbG9naWNhbC1yZXBsaWNhdGlvbi5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9sb2dpY2FsLXJl cGxpY2F0aW9uLnNnbWwKQEAgLTE1MDQsMTIgKzE1MDQsMTEgQEAgQ09OVEVYVDogIHByb2Nlc3Np bmcgcmVtb3RlIGRhdGEgZm9yIHJlcGxpY2F0aW9uIG9yaWdpbiAicGdfMTYzOTUiIGR1cmluZyAi SU5TRVIKIAogICA8cGFyYT4KICAgIFdoZW4gdGhlIHN0cmVhbWluZyBtb2RlIGlzIDxsaXRlcmFs PnBhcmFsbGVsPC9saXRlcmFsPiwgdGhlIGZpbmlzaCBMU04gb2YKLSAgIGZhaWxlZCB0cmFuc2Fj dGlvbnMgbWF5IG5vdCBiZSBsb2dnZWQuIEluIHRoYXQgY2FzZSwgaXQgbWF5IGJlIG5lY2Vzc2Fy eSB0bwotICAgY2hhbmdlIHRoZSBzdHJlYW1pbmcgbW9kZSB0byA8bGl0ZXJhbD5vbjwvbGl0ZXJh bD4gb3IgPGxpdGVyYWw+b2ZmPC9saXRlcmFsPiBhbmQKLSAgIGNhdXNlIHRoZSBzYW1lIGNvbmZs aWN0cyBhZ2FpbiBzbyB0aGUgZmluaXNoIExTTiBvZiB0aGUgZmFpbGVkIHRyYW5zYWN0aW9uIHdp bGwKLSAgIGJlIHdyaXR0ZW4gdG8gdGhlIHNlcnZlciBsb2cuIEZvciB0aGUgdXNhZ2Ugb2YgZmlu aXNoIExTTiwgcGxlYXNlIHJlZmVyIHRvIDxsaW5rCi0gICBsaW5rZW5kPSJzcWwtYWx0ZXJzdWJz Y3JpcHRpb24iPjxjb21tYW5kPkFMVEVSIFNVQlNDUklQVElPTiAuLi4KLSAgIFNLSVA8L2NvbW1h bmQ+PC9saW5rPi4KKyAgIGZhaWxlZCB0cmFuc2FjdGlvbnMgbWF5IG5vdCBiZSBsb2dnZWQuIElu IHRoYXQgY2FzZSwgdGhlIGZhaWxlZCB0cmFuc2FjdGlvbgorICAgd2lsbCBiZSByZXRyaWVkIGlu IDxsaXRlcmFsPnN0cmVhbWluZyA9IG9uPC9saXRlcmFsPiBtb2RlLiBJZiBpdCBmYWlscworICAg YWdhaW4sIHRoZSBmaW5pc2ggTFNOIG9mIHRoZSBmYWlsZWQgdHJhbnNhY3Rpb24gd2lsbCBiZSB3 cml0dGVuIHRvIHRoZQorICAgc2VydmVyIGxvZy4gRm9yIHRoZSB1c2FnZSBvZiBmaW5pc2ggTFNO LCBwbGVhc2UgcmVmZXIgdG8KKyAgIDxsaW5rIGxpbmtlbmQ9InNxbC1hbHRlcnN1YnNjcmlwdGlv biI+PGNvbW1hbmQ+QUxURVIgU1VCU0NSSVBUSU9OIC4uLiBTS0lQPC9jb21tYW5kPjwvbGluaz4u CiAgIDwvcGFyYT4KICA8L3NlY3QxPgogCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL2Ny ZWF0ZV9zdWJzY3JpcHRpb24uc2dtbCBiL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3N1YnNjcmlw dGlvbi5zZ21sCmluZGV4IGViYTcyYzZhZjYuLmRlY2Q1NTQ0NTcgMTAwNjQ0Ci0tLSBhL2RvYy9z cmMvc2dtbC9yZWYvY3JlYXRlX3N1YnNjcmlwdGlvbi5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9y ZWYvY3JlYXRlX3N1YnNjcmlwdGlvbi5zZ21sCkBAIC0yNTEsNiArMjUxLDExIEBAIENSRUFURSBT VUJTQ1JJUFRJT04gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnN1YnNjcmlwdGlvbl9u YW1lPC9yZXBsYWNlYWJsCiAgICAgICAgICAgdHJhbnNhY3Rpb24gaXMgY29tbWl0dGVkLiBOb3Rl IHRoYXQgaWYgYW4gZXJyb3IgaGFwcGVucyBpbiBhCiAgICAgICAgICAgcGFyYWxsZWwgYXBwbHkg d29ya2VyLCB0aGUgZmluaXNoIExTTiBvZiB0aGUgcmVtb3RlIHRyYW5zYWN0aW9uCiAgICAgICAg ICAgbWlnaHQgbm90IGJlIHJlcG9ydGVkIGluIHRoZSBzZXJ2ZXIgbG9nLgorICAgICAgICAgIFdo ZW4gYXBwbHlpbmcgc3RyZWFtaW5nIHRyYW5zYWN0aW9ucywgaWYgYSBkZWFkbG9jayBpcyBkZXRl Y3RlZCwgdGhlCisgICAgICAgICAgcGFyYWxsZWwgYXBwbHkgd29ya2VyIHdpbGwgZXhpdCB3aXRo IGFuIGVycm9yLiBUaGUKKyAgICAgICAgICA8bGl0ZXJhbD5wYXJhbGxlbDwvbGl0ZXJhbD4gbW9k ZSBpcyBkaXNyZWdhcmRlZCB3aGVuIHJldHJ5aW5nOworICAgICAgICAgIGluc3RlYWQgdGhlIHRy YW5zYWN0aW9uIHdpbGwgYmUgYXBwbGllZCB1c2luZyA8bGl0ZXJhbD5vbjwvbGl0ZXJhbD4KKyAg ICAgICAgICBtb2RlLgogICAgICAgICAgPC9wYXJhPgogICAgICAgICA8L2xpc3RpdGVtPgogICAg ICAgIDwvdmFybGlzdGVudHJ5PgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19z dWJzY3JpcHRpb24uYyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfc3Vic2NyaXB0aW9uLmMKaW5k ZXggYTU2YWUzMTFjMy4uMGViNWZmYjNlMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxv Zy9wZ19zdWJzY3JpcHRpb24uYworKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX3N1YnNjcmlw dGlvbi5jCkBAIC03MSw2ICs3MSw3IEBAIEdldFN1YnNjcmlwdGlvbihPaWQgc3ViaWQsIGJvb2wg bWlzc2luZ19vaykKIAlzdWItPnN0cmVhbSA9IHN1YmZvcm0tPnN1YnN0cmVhbTsKIAlzdWItPnR3 b3BoYXNlc3RhdGUgPSBzdWJmb3JtLT5zdWJ0d29waGFzZXN0YXRlOwogCXN1Yi0+ZGlzYWJsZW9u ZXJyID0gc3ViZm9ybS0+c3ViZGlzYWJsZW9uZXJyOworCXN1Yi0+cmV0cnkgPSBzdWJmb3JtLT5z dWJyZXRyeTsKIAogCS8qIEdldCBjb25uaW5mbyAqLwogCWRhdHVtID0gU3lzQ2FjaGVHZXRBdHRy KFNVQlNDUklQVElPTk9JRCwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVt X3ZpZXdzLnNxbCBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVtX3ZpZXdzLnNxbAppbmRleCA0 NDdjOWI5NzBmLi5hZjA3Njg0YjIwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL3N5 c3RlbV92aWV3cy5zcWwKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fdmlld3Muc3Fs CkBAIC0xMzAxLDcgKzEzMDEsNyBAQCBSRVZPS0UgQUxMIE9OIHBnX3JlcGxpY2F0aW9uX29yaWdp bl9zdGF0dXMgRlJPTSBwdWJsaWM7CiBSRVZPS0UgQUxMIE9OIHBnX3N1YnNjcmlwdGlvbiBGUk9N IHB1YmxpYzsKIEdSQU5UIFNFTEVDVCAob2lkLCBzdWJkYmlkLCBzdWJza2lwbHNuLCBzdWJuYW1l LCBzdWJvd25lciwgc3ViZW5hYmxlZCwKICAgICAgICAgICAgICAgc3ViYmluYXJ5LCBzdWJzdHJl YW0sIHN1YnR3b3BoYXNlc3RhdGUsIHN1YmRpc2FibGVvbmVyciwKLSAgICAgICAgICAgICAgc3Vi c2xvdG5hbWUsIHN1YnN5bmNjb21taXQsIHN1YnB1YmxpY2F0aW9ucywgc3Vib3JpZ2luKQorICAg ICAgICAgICAgICBzdWJyZXRyeSwgc3Vic2xvdG5hbWUsIHN1YnN5bmNjb21taXQsIHN1YnB1Ymxp Y2F0aW9ucywgc3Vib3JpZ2luKQogICAgIE9OIHBnX3N1YnNjcmlwdGlvbiBUTyBwdWJsaWM7CiAK IENSRUFURSBWSUVXIHBnX3N0YXRfc3Vic2NyaXB0aW9uX3N0YXRzIEFTCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9jb21tYW5kcy9zdWJzY3JpcHRpb25jbWRzLmMgYi9zcmMvYmFja2VuZC9jb21t YW5kcy9zdWJzY3JpcHRpb25jbWRzLmMKaW5kZXggYmMxYjE5ODU4Yy4uODM2N2JjNmY0ZCAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvc3Vic2NyaXB0aW9uY21kcy5jCisrKyBiL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL3N1YnNjcmlwdGlvbmNtZHMuYwpAQCAtNjM1LDYgKzYzNSw3IEBA IENyZWF0ZVN1YnNjcmlwdGlvbihQYXJzZVN0YXRlICpwc3RhdGUsIENyZWF0ZVN1YnNjcmlwdGlv blN0bXQgKnN0bXQsCiAJCQkJCSBMT0dJQ0FMUkVQX1RXT1BIQVNFX1NUQVRFX1BFTkRJTkcgOgog CQkJCQkgTE9HSUNBTFJFUF9UV09QSEFTRV9TVEFURV9ESVNBQkxFRCk7CiAJdmFsdWVzW0FudW1f cGdfc3Vic2NyaXB0aW9uX3N1YmRpc2FibGVvbmVyciAtIDFdID0gQm9vbEdldERhdHVtKG9wdHMu ZGlzYWJsZW9uZXJyKTsKKwl2YWx1ZXNbQW51bV9wZ19zdWJzY3JpcHRpb25fc3VicmV0cnkgLSAx XSA9IEJvb2xHZXREYXR1bShmYWxzZSk7CiAJdmFsdWVzW0FudW1fcGdfc3Vic2NyaXB0aW9uX3N1 YmNvbm5pbmZvIC0gMV0gPQogCQlDU3RyaW5nR2V0VGV4dERhdHVtKGNvbm5pbmZvKTsKIAlpZiAo b3B0cy5zbG90X25hbWUpCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL2FwcGx5cGFyYWxsZWx3b3JrZXIuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2lj YWwvYXBwbHlwYXJhbGxlbHdvcmtlci5jCmluZGV4IDRlMjRkZjA5MzUuLmJhZGZiMzcxYTIgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvYXBwbHlwYXJhbGxlbHdv cmtlci5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvYXBwbHlwYXJhbGxl bHdvcmtlci5jCkBAIC0zMTAsNiArMzEwLDE3IEBAIHBhX2Nhbl9zdGFydCh2b2lkKQogCWlmICgh QWxsVGFibGVzeW5jc1JlYWR5KCkpCiAJCXJldHVybiBmYWxzZTsKIAorCS8qCisJICogRG9uJ3Qg dXNlIHBhcmFsbGVsIGFwcGx5IHdvcmtlcnMgZm9yIHJldHJpZXMsIGJlY2F1c2UgaXQgaXMgcG9z c2libGUKKwkgKiB0aGF0IGEgZGVhZGxvY2sgd2FzIGRldGVjdGVkIHRoZSBsYXN0IHRpbWUgd2Ug dHJpZWQgdG8gYXBwbHkgYQorCSAqIHRyYW5zYWN0aW9uIHVzaW5nIGEgcGFyYWxsZWwgYXBwbHkg d29ya2VyLgorCSAqLworCWlmIChNeVN1YnNjcmlwdGlvbi0+cmV0cnkpCisJeworCQllbG9nKERF QlVHMSwgInBhcmFsbGVsIGFwcGx5IHdvcmtlcnMgYXJlIG5vdCB1c2VkIGZvciByZXRyaWVzIik7 CisJCXJldHVybiBmYWxzZTsKKwl9CisKIAlyZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTY3MCwzICsx NjgxLDIyIEBAIHBhX3hhY3RfZmluaXNoKFBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICp3aW5mbywg WExvZ1JlY1B0ciByZW1vdGVfbHNuKQogCiAJcGFfZnJlZV93b3JrZXIod2luZm8pOwogfQorCisv KiBDaGVjayBpZiBhbnkgYWN0aXZlIHBhcmFsbGVsIGFwcGx5IHdvcmtlcnMuICovCitib29sCitw YV9oYXZlX2FjdGl2ZV93b3JrZXIodm9pZCkKK3sKKwlMaXN0Q2VsbCAgICpsYzsKKworCWZvcmVh Y2gobGMsIFBhcmFsbGVsQXBwbHlXb3JrZXJQb29sKQorCXsKKwkJUGFyYWxsZWxBcHBseVdvcmtl ckluZm8gKnRtcF93aW5mbzsKKworCQl0bXBfd2luZm8gPSAoUGFyYWxsZWxBcHBseVdvcmtlcklu Zm8gKikgbGZpcnN0KGxjKTsKKworCQlpZiAodG1wX3dpbmZvLT5pbl91c2UpCisJCQlyZXR1cm4g dHJ1ZTsKKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9n aWNhbC93b3JrZXIuYwppbmRleCA5ODI5OTY0YWQzLi5hNWFkNzA0YTNlIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jCisrKyBiL3NyYy9iYWNrZW5k L3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMKQEAgLTM5Miw3ICszOTIsNyBAQCBzdGF0aWMg dm9pZCBzdHJlYW1fY2xvc2VfZmlsZSh2b2lkKTsKIAogc3RhdGljIHZvaWQgc2VuZF9mZWVkYmFj ayhYTG9nUmVjUHRyIHJlY3Zwb3MsIGJvb2wgZm9yY2UsIGJvb2wgcmVxdWVzdFJlcGx5KTsKIAot c3RhdGljIHZvaWQgRGlzYWJsZVN1YnNjcmlwdGlvbkFuZEV4aXQodm9pZCk7CitzdGF0aWMgdm9p ZCBEaXNhYmxlU3Vic2NyaXB0aW9uT25FcnJvcih2b2lkKTsKIAogc3RhdGljIHZvaWQgYXBwbHlf aGFuZGxlX2NvbW1pdF9pbnRlcm5hbChMb2dpY2FsUmVwQ29tbWl0RGF0YSAqY29tbWl0X2RhdGEp Owogc3RhdGljIHZvaWQgYXBwbHlfaGFuZGxlX2luc2VydF9pbnRlcm5hbChBcHBseUV4ZWN1dGlv bkRhdGEgKmVkYXRhLApAQCAtNDI5LDYgKzQyOSw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCByZXNl dF9hcHBseV9lcnJvcl9jb250ZXh0X2luZm8odm9pZCk7CiBzdGF0aWMgVHJhbnNBcHBseUFjdGlv biBnZXRfdHJhbnNhY3Rpb25fYXBwbHlfYWN0aW9uKFRyYW5zYWN0aW9uSWQgeGlkLAogCQkJCQkJ CQkJCQkJCSBQYXJhbGxlbEFwcGx5V29ya2VySW5mbyAqKndpbmZvKTsKIAorc3RhdGljIHZvaWQg c2V0X3N1YnNjcmlwdGlvbl9yZXRyeShib29sIHJldHJ5KTsKKwogLyoKICAqIFJldHVybiB0aGUg bmFtZSBvZiB0aGUgbG9naWNhbCByZXBsaWNhdGlvbiB3b3JrZXIuCiAgKi8KQEAgLTEwNDQsNiAr MTA0Niw5IEBAIGFwcGx5X2hhbmRsZV9jb21taXQoU3RyaW5nSW5mbyBzKQogCS8qIFByb2Nlc3Mg YW55IHRhYmxlcyB0aGF0IGFyZSBiZWluZyBzeW5jaHJvbml6ZWQgaW4gcGFyYWxsZWwuICovCiAJ cHJvY2Vzc19zeW5jaW5nX3RhYmxlcyhjb21taXRfZGF0YS5lbmRfbHNuKTsKIAorCS8qIFJlc2V0 IHRoZSByZXRyeSBmbGFnLiAqLworCXNldF9zdWJzY3JpcHRpb25fcmV0cnkoZmFsc2UpOworCiAJ cGdzdGF0X3JlcG9ydF9hY3Rpdml0eShTVEFURV9JRExFLCBOVUxMKTsKIAlyZXNldF9hcHBseV9l cnJvcl9jb250ZXh0X2luZm8oKTsKIH0KQEAgLTExNTAsNiArMTE1NSw5IEBAIGFwcGx5X2hhbmRs ZV9wcmVwYXJlKFN0cmluZ0luZm8gcykKIAogCWluX3JlbW90ZV90cmFuc2FjdGlvbiA9IGZhbHNl OwogCisJLyogUmVzZXQgdGhlIHJldHJ5IGZsYWcuICovCisJc2V0X3N1YnNjcmlwdGlvbl9yZXRy eShmYWxzZSk7CisKIAkvKiBQcm9jZXNzIGFueSB0YWJsZXMgdGhhdCBhcmUgYmVpbmcgc3luY2hy b25pemVkIGluIHBhcmFsbGVsLiAqLwogCXByb2Nlc3Nfc3luY2luZ190YWJsZXMocHJlcGFyZV9k YXRhLmVuZF9sc24pOwogCkBAIC0xMjA2LDYgKzEyMTQsOSBAQCBhcHBseV9oYW5kbGVfY29tbWl0 X3ByZXBhcmVkKFN0cmluZ0luZm8gcykKIAlzdG9yZV9mbHVzaF9wb3NpdGlvbihwcmVwYXJlX2Rh dGEuZW5kX2xzbiwgWGFjdExhc3RDb21taXRFbmQpOwogCWluX3JlbW90ZV90cmFuc2FjdGlvbiA9 IGZhbHNlOwogCisJLyogUmVzZXQgdGhlIHJldHJ5IGZsYWcuICovCisJc2V0X3N1YnNjcmlwdGlv bl9yZXRyeShmYWxzZSk7CisKIAkvKiBQcm9jZXNzIGFueSB0YWJsZXMgdGhhdCBhcmUgYmVpbmcg c3luY2hyb25pemVkIGluIHBhcmFsbGVsLiAqLwogCXByb2Nlc3Nfc3luY2luZ190YWJsZXMocHJl cGFyZV9kYXRhLmVuZF9sc24pOwogCkBAIC0xMjY3LDYgKzEyNzgsOSBAQCBhcHBseV9oYW5kbGVf cm9sbGJhY2tfcHJlcGFyZWQoU3RyaW5nSW5mbyBzKQogCXN0b3JlX2ZsdXNoX3Bvc2l0aW9uKHJv bGxiYWNrX2RhdGEucm9sbGJhY2tfZW5kX2xzbiwgWGFjdExhc3RDb21taXRFbmQpOwogCWluX3Jl bW90ZV90cmFuc2FjdGlvbiA9IGZhbHNlOwogCisJLyogUmVzZXQgdGhlIHJldHJ5IGZsYWcuICov CisJc2V0X3N1YnNjcmlwdGlvbl9yZXRyeShmYWxzZSk7CisKIAkvKiBQcm9jZXNzIGFueSB0YWJs ZXMgdGhhdCBhcmUgYmVpbmcgc3luY2hyb25pemVkIGluIHBhcmFsbGVsLiAqLwogCXByb2Nlc3Nf c3luY2luZ190YWJsZXMocm9sbGJhY2tfZGF0YS5yb2xsYmFja19lbmRfbHNuKTsKIApAQCAtMTM5 Miw2ICsxNDA2LDkgQEAgYXBwbHlfaGFuZGxlX3N0cmVhbV9wcmVwYXJlKFN0cmluZ0luZm8gcykK IAkJCWJyZWFrOwogCX0KIAorCS8qIFJlc2V0IHRoZSByZXRyeSBmbGFnLiAqLworCXNldF9zdWJz Y3JpcHRpb25fcmV0cnkoZmFsc2UpOworCiAJcGdzdGF0X3JlcG9ydF9zdGF0KGZhbHNlKTsKIAog CS8qIFByb2Nlc3MgYW55IHRhYmxlcyB0aGF0IGFyZSBiZWluZyBzeW5jaHJvbml6ZWQgaW4gcGFy YWxsZWwuICovCkBAIC0xOTYyLDYgKzE5NzksMTAgQEAgYXBwbHlfaGFuZGxlX3N0cmVhbV9hYm9y dChTdHJpbmdJbmZvIHMpCiAJCQlicmVhazsKIAl9CiAKKwkvKiBSZXNldCB0aGUgcmV0cnkgZmxh Zy4gKi8KKwlpZiAodG9wbGV2ZWxfeGFjdCkKKwkJc2V0X3N1YnNjcmlwdGlvbl9yZXRyeShmYWxz ZSk7CisKIAlyZXNldF9hcHBseV9lcnJvcl9jb250ZXh0X2luZm8oKTsKIH0KIApAQCAtMjI0NCw2 ICsyMjY1LDkgQEAgYXBwbHlfaGFuZGxlX3N0cmVhbV9jb21taXQoU3RyaW5nSW5mbyBzKQogCS8q IFByb2Nlc3MgYW55IHRhYmxlcyB0aGF0IGFyZSBiZWluZyBzeW5jaHJvbml6ZWQgaW4gcGFyYWxs ZWwuICovCiAJcHJvY2Vzc19zeW5jaW5nX3RhYmxlcyhjb21taXRfZGF0YS5lbmRfbHNuKTsKIAor CS8qIFJlc2V0IHRoZSByZXRyeSBmbGFnLiAqLworCXNldF9zdWJzY3JpcHRpb25fcmV0cnkoZmFs c2UpOworCiAJcGdzdGF0X3JlcG9ydF9hY3Rpdml0eShTVEFURV9JRExFLCBOVUxMKTsKIAogCXJl c2V0X2FwcGx5X2Vycm9yX2NvbnRleHRfaW5mbygpOwpAQCAtNDM0NSwyMCArNDM2OSwyOCBAQCBz dGFydF90YWJsZV9zeW5jKFhMb2dSZWNQdHIgKm9yaWdpbl9zdGFydHBvcywgY2hhciAqKm15c2xv dG5hbWUpCiAJfQogCVBHX0NBVENIKCk7CiAJeworCQkvKgorCQkgKiBFbWl0IHRoZSBlcnJvciBt ZXNzYWdlLCBhbmQgcmVjb3ZlciBmcm9tIHRoZSBlcnJvciBzdGF0ZSB0byBhbiBpZGxlCisJCSAq IHN0YXRlCisJCSAqLworCQlIT0xEX0lOVEVSUlVQVFMoKTsKKworCQlFbWl0RXJyb3JSZXBvcnQo KTsKKwkJQWJvcnRPdXRPZkFueVRyYW5zYWN0aW9uKCk7CisJCUZsdXNoRXJyb3JTdGF0ZSgpOwor CisJCVJFU1VNRV9JTlRFUlJVUFRTKCk7CisKKwkJLyogUmVwb3J0IHRoZSB3b3JrZXIgZmFpbGVk IGR1cmluZyB0YWJsZSBzeW5jaHJvbml6YXRpb24gKi8KKwkJcGdzdGF0X3JlcG9ydF9zdWJzY3Jp cHRpb25fZXJyb3IoTXlTdWJzY3JpcHRpb24tPm9pZCwgZmFsc2UpOworCiAJCWlmIChNeVN1YnNj cmlwdGlvbi0+ZGlzYWJsZW9uZXJyKQotCQkJRGlzYWJsZVN1YnNjcmlwdGlvbkFuZEV4aXQoKTsK LQkJZWxzZQotCQl7Ci0JCQkvKgotCQkJICogUmVwb3J0IHRoZSB3b3JrZXIgZmFpbGVkIGR1cmlu ZyB0YWJsZSBzeW5jaHJvbml6YXRpb24uIEFib3J0Ci0JCQkgKiB0aGUgY3VycmVudCB0cmFuc2Fj dGlvbiBzbyB0aGF0IHRoZSBzdGF0cyBtZXNzYWdlIGlzIHNlbnQgaW4gYW4KLQkJCSAqIGlkbGUg c3RhdGUuCi0JCQkgKi8KLQkJCUFib3J0T3V0T2ZBbnlUcmFuc2FjdGlvbigpOwotCQkJcGdzdGF0 X3JlcG9ydF9zdWJzY3JpcHRpb25fZXJyb3IoTXlTdWJzY3JpcHRpb24tPm9pZCwgZmFsc2UpOwor CQkJRGlzYWJsZVN1YnNjcmlwdGlvbk9uRXJyb3IoKTsKIAotCQkJUEdfUkVfVEhST1coKTsKLQkJ fQorCQkvKiBTZXQgdGhlIHJldHJ5IGZsYWcuICovCisJCXNldF9zdWJzY3JpcHRpb25fcmV0cnko dHJ1ZSk7CisKKwkJcHJvY19leGl0KDApOwogCX0KIAlQR19FTkRfVFJZKCk7CiAKQEAgLTQzODMs MjAgKzQ0MTUsMjcgQEAgc3RhcnRfYXBwbHkoWExvZ1JlY1B0ciBvcmlnaW5fc3RhcnRwb3MpCiAJ fQogCVBHX0NBVENIKCk7CiAJeworCQkvKgorCQkgKiBFbWl0IHRoZSBlcnJvciBtZXNzYWdlLCBh bmQgcmVjb3ZlciBmcm9tIHRoZSBlcnJvciBzdGF0ZSB0byBhbiBpZGxlCisJCSAqIHN0YXRlCisJ CSAqLworCQlIT0xEX0lOVEVSUlVQVFMoKTsKKworCQlFbWl0RXJyb3JSZXBvcnQoKTsKKwkJQWJv cnRPdXRPZkFueVRyYW5zYWN0aW9uKCk7CisJCUZsdXNoRXJyb3JTdGF0ZSgpOworCisJCVJFU1VN RV9JTlRFUlJVUFRTKCk7CisKKwkJLyogUmVwb3J0IHRoZSB3b3JrZXIgZmFpbGVkIHdoaWxlIGFw cGx5aW5nIGNoYW5nZXMgKi8KKwkJcGdzdGF0X3JlcG9ydF9zdWJzY3JpcHRpb25fZXJyb3IoTXlT dWJzY3JpcHRpb24tPm9pZCwKKwkJCQkJCQkJCQkgIWFtX3RhYmxlc3luY193b3JrZXIoKSk7CisK IAkJaWYgKE15U3Vic2NyaXB0aW9uLT5kaXNhYmxlb25lcnIpCi0JCQlEaXNhYmxlU3Vic2NyaXB0 aW9uQW5kRXhpdCgpOwotCQllbHNlCi0JCXsKLQkJCS8qCi0JCQkgKiBSZXBvcnQgdGhlIHdvcmtl ciBmYWlsZWQgd2hpbGUgYXBwbHlpbmcgY2hhbmdlcy4gQWJvcnQgdGhlCi0JCQkgKiBjdXJyZW50 IHRyYW5zYWN0aW9uIHNvIHRoYXQgdGhlIHN0YXRzIG1lc3NhZ2UgaXMgc2VudCBpbiBhbgotCQkJ ICogaWRsZSBzdGF0ZS4KLQkJCSAqLwotCQkJQWJvcnRPdXRPZkFueVRyYW5zYWN0aW9uKCk7Ci0J CQlwZ3N0YXRfcmVwb3J0X3N1YnNjcmlwdGlvbl9lcnJvcihNeVN1YnNjcmlwdGlvbi0+b2lkLCAh YW1fdGFibGVzeW5jX3dvcmtlcigpKTsKKwkJCURpc2FibGVTdWJzY3JpcHRpb25PbkVycm9yKCk7 CiAKLQkJCVBHX1JFX1RIUk9XKCk7Ci0JCX0KKwkJLyogU2V0IHRoZSByZXRyeSBmbGFnLiAqLwor CQlzZXRfc3Vic2NyaXB0aW9uX3JldHJ5KHRydWUpOwogCX0KIAlQR19FTkRfVFJZKCk7CiB9CkBA IC00NjcyLDM5ICs0NzExLDIwIEBAIEFwcGx5V29ya2VyTWFpbihEYXR1bSBtYWluX2FyZykKIH0K IAogLyoKLSAqIEFmdGVyIGVycm9yIHJlY292ZXJ5LCBkaXNhYmxlIHRoZSBzdWJzY3JpcHRpb24g aW4gYSBuZXcgdHJhbnNhY3Rpb24KLSAqIGFuZCBleGl0IGNsZWFubHkuCisgKiBEaXNhYmxlIHRo ZSBzdWJzY3JpcHRpb24gaW4gYSBuZXcgdHJhbnNhY3Rpb24uCiAgKi8KIHN0YXRpYyB2b2lkCi1E aXNhYmxlU3Vic2NyaXB0aW9uQW5kRXhpdCh2b2lkKQorRGlzYWJsZVN1YnNjcmlwdGlvbk9uRXJy b3Iodm9pZCkKIHsKLQkvKgotCSAqIEVtaXQgdGhlIGVycm9yIG1lc3NhZ2UsIGFuZCByZWNvdmVy IGZyb20gdGhlIGVycm9yIHN0YXRlIHRvIGFuIGlkbGUKLQkgKiBzdGF0ZQotCSAqLwotCUhPTERf SU5URVJSVVBUUygpOwotCi0JRW1pdEVycm9yUmVwb3J0KCk7Ci0JQWJvcnRPdXRPZkFueVRyYW5z YWN0aW9uKCk7Ci0JRmx1c2hFcnJvclN0YXRlKCk7Ci0KLQlSRVNVTUVfSU5URVJSVVBUUygpOwot Ci0JLyogUmVwb3J0IHRoZSB3b3JrZXIgZmFpbGVkIGR1cmluZyBlaXRoZXIgdGFibGUgc3luY2hy b25pemF0aW9uIG9yIGFwcGx5ICovCi0JcGdzdGF0X3JlcG9ydF9zdWJzY3JpcHRpb25fZXJyb3Io TXlMb2dpY2FsUmVwV29ya2VyLT5zdWJpZCwKLQkJCQkJCQkJCSAhYW1fdGFibGVzeW5jX3dvcmtl cigpKTsKLQogCS8qIERpc2FibGUgdGhlIHN1YnNjcmlwdGlvbiAqLwogCVN0YXJ0VHJhbnNhY3Rp b25Db21tYW5kKCk7CiAJRGlzYWJsZVN1YnNjcmlwdGlvbihNeVN1YnNjcmlwdGlvbi0+b2lkKTsK IAlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKIAotCS8qIE5vdGlmeSB0aGUgc3Vic2NyaXB0 aW9uIGhhcyBiZWVuIGRpc2FibGVkIGFuZCBleGl0ICovCisJLyogTm90aWZ5IHRoZSBzdWJzY3Jp cHRpb24gaGFzIGJlZW4gZGlzYWJsZWQgKi8KIAllcmVwb3J0KExPRywKIAkJCWVycm1zZygic3Vi c2NyaXB0aW9uIFwiJXNcIiBoYXMgYmVlbiBkaXNhYmxlZCBiZWNhdXNlIG9mIGFuIGVycm9yIiwK IAkJCQkgICBNeVN1YnNjcmlwdGlvbi0+bmFtZSkpOwotCi0JcHJvY19leGl0KDApOwogfQogCiAv KgpAQCAtNDk5NywzICs1MDE3LDcxIEBAIGdldF90cmFuc2FjdGlvbl9hcHBseV9hY3Rpb24oVHJh bnNhY3Rpb25JZCB4aWQsIFBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICoqd2luZm8pCiAJCXJldHVy biBUUkFOU19MRUFERVJfU0VORF9UT19QQVJBTExFTDsKIAl9CiB9CisKKy8qCisgKiBTZXQgc3Vi cmV0cnkgb2YgcGdfc3Vic2NyaXB0aW9uIGNhdGFsb2cuCisgKgorICogSWYgcmV0cnkgaXMgdHJ1 ZSwgc3Vic2NyaWJlciBpcyBhYm91dCB0byBleGl0IHdpdGggYW4gZXJyb3IuIE90aGVyd2lzZSwg aXQKKyAqIG1lYW5zIHRoYXQgdGhlIHRyYW5zYWN0aW9uIHdhcyBhcHBsaWVkIHN1Y2Nlc3NmdWxs eS4KKyAqLworc3RhdGljIHZvaWQKK3NldF9zdWJzY3JpcHRpb25fcmV0cnkoYm9vbCByZXRyeSkK K3sKKwlSZWxhdGlvbglyZWw7CisJSGVhcFR1cGxlCXR1cDsKKwlib29sCQlzdGFydGVkX3R4ID0g ZmFsc2U7CisJYm9vbAkJbnVsbHNbTmF0dHNfcGdfc3Vic2NyaXB0aW9uXTsKKwlib29sCQlyZXBs YWNlc1tOYXR0c19wZ19zdWJzY3JpcHRpb25dOworCURhdHVtCQl2YWx1ZXNbTmF0dHNfcGdfc3Vi c2NyaXB0aW9uXTsKKworCS8qIEZhc3QgcGF0aCAtIGlmIG5vIHN0YXRlIGNoYW5nZSB0aGVuIG5v dGhpbmcgdG8gZG8gKi8KKwlpZiAoTXlTdWJzY3JpcHRpb24tPnJldHJ5ID09IHJldHJ5KQorCQly ZXR1cm47CisKKwkvKiBGYXN0IHBhdGggLSBza2lwIGZvciBwYXJhbGxlbCBhcHBseSB3b3JrZXJz ICovCisJaWYgKGFtX3BhcmFsbGVsX2FwcGx5X3dvcmtlcigpKQorCQlyZXR1cm47CisKKwkvKiBG YXN0IHBhdGggLSBza2lwIHNldCByZXRyeSBpZiBubyBhY3RpdmUgcGFyYWxsZWwgYXBwbHkgd29y a2VycyAqLworCWlmIChyZXRyeSAmJiAhcGFfaGF2ZV9hY3RpdmVfd29ya2VyKCkpCisJCXJldHVy bjsKKworCWlmICghSXNUcmFuc2FjdGlvblN0YXRlKCkpCisJeworCQlTdGFydFRyYW5zYWN0aW9u Q29tbWFuZCgpOworCQlzdGFydGVkX3R4ID0gdHJ1ZTsKKwl9CisKKwkvKiBMb29rIHVwIHRoZSBz dWJzY3JpcHRpb24gaW4gdGhlIGNhdGFsb2cgKi8KKwlyZWwgPSB0YWJsZV9vcGVuKFN1YnNjcmlw dGlvblJlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2spOworCXR1cCA9IFNlYXJjaFN5c0NhY2hl Q29weTEoU1VCU0NSSVBUSU9OT0lELAorCQkJCQkJCSAgT2JqZWN0SWRHZXREYXR1bShNeVN1YnNj cmlwdGlvbi0+b2lkKSk7CisKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHVwKSkKKwkJZWxvZyhF UlJPUiwgInN1YnNjcmlwdGlvbiBcIiVzXCIgZG9lcyBub3QgZXhpc3QiLCBNeVN1YnNjcmlwdGlv bi0+bmFtZSk7CisKKwlMb2NrU2hhcmVkT2JqZWN0KFN1YnNjcmlwdGlvblJlbGF0aW9uSWQsIE15 U3Vic2NyaXB0aW9uLT5vaWQsIDAsCisJCQkJCSBBY2Nlc3NTaGFyZUxvY2spOworCisJLyogRm9y bSBhIG5ldyB0dXBsZS4gKi8KKwltZW1zZXQodmFsdWVzLCAwLCBzaXplb2YodmFsdWVzKSk7CisJ bWVtc2V0KG51bGxzLCBmYWxzZSwgc2l6ZW9mKG51bGxzKSk7CisJbWVtc2V0KHJlcGxhY2VzLCBm YWxzZSwgc2l6ZW9mKHJlcGxhY2VzKSk7CisKKwkvKiBTZXQgc3VicmV0cnkgKi8KKwl2YWx1ZXNb QW51bV9wZ19zdWJzY3JpcHRpb25fc3VicmV0cnkgLSAxXSA9IEJvb2xHZXREYXR1bShyZXRyeSk7 CisJcmVwbGFjZXNbQW51bV9wZ19zdWJzY3JpcHRpb25fc3VicmV0cnkgLSAxXSA9IHRydWU7CisK Kwl0dXAgPSBoZWFwX21vZGlmeV90dXBsZSh0dXAsIFJlbGF0aW9uR2V0RGVzY3IocmVsKSwgdmFs dWVzLCBudWxscywKKwkJCQkJCQlyZXBsYWNlcyk7CisKKwkvKiBVcGRhdGUgdGhlIGNhdGFsb2cu ICovCisJQ2F0YWxvZ1R1cGxlVXBkYXRlKHJlbCwgJnR1cC0+dF9zZWxmLCB0dXApOworCisJLyog Q2xlYW51cC4gKi8KKwloZWFwX2ZyZWV0dXBsZSh0dXApOworCXRhYmxlX2Nsb3NlKHJlbCwgTm9M b2NrKTsKKworCWlmIChzdGFydGVkX3R4KQorCQlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsK K30KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMgYi9zcmMvYmluL3BnX2R1 bXAvcGdfZHVtcC5jCmluZGV4IDVlODAwZGM3OWEuLjkzMTIzM2ZjNmUgMTAwNjQ0Ci0tLSBhL3Ny Yy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYwpA QCAtNDU2MCw4ICs0NTYwLDkgQEAgZ2V0U3Vic2NyaXB0aW9ucyhBcmNoaXZlICpmb3V0KQogCW50 dXBzID0gUFFudHVwbGVzKHJlcyk7CiAKIAkvKgotCSAqIEdldCBzdWJzY3JpcHRpb24gZmllbGRz LiBXZSBkb24ndCBpbmNsdWRlIHN1YnNraXBsc24gaW4gdGhlIGR1bXAgYXMKLQkgKiBhZnRlciBy ZXN0b3JpbmcgdGhlIGR1bXAgdGhpcyB2YWx1ZSBtYXkgbm8gbG9uZ2VyIGJlIHJlbGV2YW50Lgor CSAqIEdldCBzdWJzY3JpcHRpb24gZmllbGRzLiBXZSBkb24ndCBpbmNsdWRlIHN1YnNraXBsc24g YW5kIHN1YnJldHJ5IGluCisJICogdGhlIGR1bXAgYXMgYWZ0ZXIgcmVzdG9yaW5nIHRoZSBkdW1w IHRoaXMgdmFsdWUgbWF5IG5vIGxvbmdlciBiZQorCSAqIHJlbGV2YW50LgogCSAqLwogCWlfdGFi bGVvaWQgPSBQUWZudW1iZXIocmVzLCAidGFibGVvaWQiKTsKIAlpX29pZCA9IFBRZm51bWJlcihy ZXMsICJvaWQiKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfc3Vic2NyaXB0 aW9uLmggYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3N1YnNjcmlwdGlvbi5oCmluZGV4IGIwZjJh MTcwNWQuLjhlZGJiY2E0NDIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfc3Vi c2NyaXB0aW9uLmgKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19zdWJzY3JpcHRpb24uaApA QCAtODgsNiArODgsMTEgQEAgQ0FUQUxPRyhwZ19zdWJzY3JpcHRpb24sNjEwMCxTdWJzY3JpcHRp b25SZWxhdGlvbklkKSBCS0lfU0hBUkVEX1JFTEFUSU9OIEJLSV9ST1cKIAlib29sCQlzdWJkaXNh Ymxlb25lcnI7CS8qIFRydWUgaWYgYSB3b3JrZXIgZXJyb3Igc2hvdWxkIGNhdXNlIHRoZQogCQkJ CQkJCQkJICogc3Vic2NyaXB0aW9uIHRvIGJlIGRpc2FibGVkICovCiAKKwlib29sCQlzdWJyZXRy eSBCS0lfREVGQVVMVChmKTsJLyogVHJ1ZSBpZiBwcmV2aW91cyBjaGFuZ2UgZmFpbGVkCisJCQkJ CQkJCQkJCSAqIHRvIGJlIGFwcGxpZWQgd2hpbGUgdGhlcmUgd2VyZQorCQkJCQkJCQkJCQkgKiBh bnkgYWN0aXZlIHBhcmFsbGVsIGFwcGx5CisJCQkJCQkJCQkJCSAqIHdvcmtlcnMgKi8KKwogI2lm ZGVmIENBVEFMT0dfVkFSTEVOCQkJLyogdmFyaWFibGUtbGVuZ3RoIGZpZWxkcyBzdGFydCBoZXJl ICovCiAJLyogQ29ubmVjdGlvbiBzdHJpbmcgdG8gdGhlIHB1Ymxpc2hlciAqLwogCXRleHQJCXN1 YmNvbm5pbmZvIEJLSV9GT1JDRV9OT1RfTlVMTDsKQEAgLTEzMSw2ICsxMzYsOCBAQCB0eXBlZGVm IHN0cnVjdCBTdWJzY3JpcHRpb24KIAlib29sCQlkaXNhYmxlb25lcnI7CS8qIEluZGljYXRlcyBp ZiB0aGUgc3Vic2NyaXB0aW9uIHNob3VsZCBiZQogCQkJCQkJCQkgKiBhdXRvbWF0aWNhbGx5IGRp c2FibGVkIGlmIGEgd29ya2VyIGVycm9yCiAJCQkJCQkJCSAqIG9jY3VycyAqLworCWJvb2wJCXJl dHJ5OwkJCS8qIEluZGljYXRlcyBpZiBwcmV2aW91cyBjaGFuZ2UgZmFpbGVkIHRvIGJlCisJCQkJ CQkJCSAqIGFwcGxpZWQgdXNpbmcgYSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgKi8KIAljaGFyCSAg ICpjb25uaW5mbzsJCS8qIENvbm5lY3Rpb24gc3RyaW5nIHRvIHRoZSBwdWJsaXNoZXIgKi8KIAlj aGFyCSAgICpzbG90bmFtZTsJCS8qIE5hbWUgb2YgdGhlIHJlcGxpY2F0aW9uIHNsb3QgKi8KIAlj aGFyCSAgICpzeW5jY29tbWl0OwkJLyogU3luY2hyb25vdXMgY29tbWl0IHNldHRpbmcgZm9yIHdv cmtlciAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vd29ya2VyX2ludGVy bmFsLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93b3JrZXJfaW50ZXJuYWwuaAppbmRleCBm M2IyZjJkZTMxLi40MmMzM2E0MTc5IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlv bi93b3JrZXJfaW50ZXJuYWwuaAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93b3JrZXJf aW50ZXJuYWwuaApAQCAtMzA4LDYgKzMwOCw4IEBAIGV4dGVybiB2b2lkIHBhX2RlY3JfYW5kX3dh aXRfc3RyZWFtX2Jsb2NrKHZvaWQpOwogZXh0ZXJuIHZvaWQgcGFfeGFjdF9maW5pc2goUGFyYWxs ZWxBcHBseVdvcmtlckluZm8gKndpbmZvLAogCQkJCQkJICAgWExvZ1JlY1B0ciByZW1vdGVfbHNu KTsKIAorZXh0ZXJuIGJvb2wgcGFfaGF2ZV9hY3RpdmVfd29ya2VyKHZvaWQpOworCiAjZGVmaW5l IGlzUGFyYWxsZWxBcHBseVdvcmtlcih3b3JrZXIpICgod29ya2VyKS0+YXBwbHlfbGVhZGVyX3Bp ZCAhPSBJbnZhbGlkUGlkKQogCiBzdGF0aWMgaW5saW5lIGJvb2wKZGlmZiAtLWdpdCBhL3NyYy90 ZXN0L3N1YnNjcmlwdGlvbi90LzAxNV9zdHJlYW0ucGwgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24v dC8wMTVfc3RyZWFtLnBsCmluZGV4IDgzZDY5NTZlZTYuLjQwNTRhNWYzNDggMTAwNjQ0Ci0tLSBh L3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAxNV9zdHJlYW0ucGwKKysrIGIvc3JjL3Rlc3Qvc3Vi c2NyaXB0aW9uL3QvMDE1X3N0cmVhbS5wbApAQCAtNzQsOCArNzQsMTYgQEAgc3ViIHRlc3Rfc3Ry ZWFtaW5nCiAJCSdjaGVjayBleHRyYSBjb2x1bW5zIGNvbnRhaW4gbG9jYWwgZGVmYXVsdHMnKTsK IAogCSMgVGVzdCB0aGUgc3RyZWFtaW5nIGluIGJpbmFyeSBtb2RlCisJbXkgJG9sZHBpZCA9ICRu b2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJTRUxFQ1QgcGlkIEZST00g cGdfc3RhdF9yZXBsaWNhdGlvbiBXSEVSRSBhcHBsaWNhdGlvbl9uYW1lID0gJyRhcHBuYW1lJyBB TkQgc3RhdGUgPSAnc3RyZWFtaW5nJzsiCisJKTsKIAkkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywKIAkJIkFMVEVSIFNVQlNDUklQVElPTiB0YXBfc3ViIFNFVCAoYmluYXJ5 ID0gb24pIik7CisJJG5vZGVfcHVibGlzaGVyLT5wb2xsX3F1ZXJ5X3VudGlsKCdwb3N0Z3Jlcycs CisJCSJTRUxFQ1QgcGlkICE9ICRvbGRwaWQgRlJPTSBwZ19zdGF0X3JlcGxpY2F0aW9uIFdIRVJF IGFwcGxpY2F0aW9uX25hbWUgPSAnJGFwcG5hbWUnIEFORCBzdGF0ZSA9ICdzdHJlYW1pbmcnOyIK KwkgICkKKwkgIG9yIGRpZQorCSAgIlRpbWVkIG91dCB3aGlsZSB3YWl0aW5nIGZvciBhcHBseSB0 byByZXN0YXJ0IGFmdGVyIGNoYW5naW5nIFNVQlNDUklQVElPTiI7CiAKIAkjIENoZWNrIHRoZSBz dWJzY3JpYmVyIGxvZyBmcm9tIG5vdyBvbi4KIAkkb2Zmc2V0ID0gLXMgJG5vZGVfc3Vic2NyaWJl ci0+bG9nZmlsZTsKQEAgLTQ1MCw2ICs0NTgsNjEgQEAgJHJlc3VsdCA9CiBpcygkcmVzdWx0LCBx cSg1MDAwKSwKIAknZGF0YSByZXBsaWNhdGVkIHRvIHN1YnNjcmliZXIgYnkgc2VyaWFsaXppbmcg bWVzc2FnZXMgdG8gZGlzaycpOwogCisjIENsZWFuIHVwIHRlc3QgZGF0YSBmcm9tIHRoZSBlbnZp cm9ubWVudC4KKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJUUlVOQ0FU RSBUQUJMRSB0ZXN0X3RhYl8yIik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAo JGFwcG5hbWUpOworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgVGVzdCByZS1hcHBseSBhIGZh aWxlZCBzdHJlYW1pbmcgdHJhbnNhY3Rpb24gdXNpbmcgdGhlIGxlYWRlciBhcHBseQorIyB3b3Jr ZXIgYW5kIGFwcGx5IHN1YnNlcXVlbnQgc3RyZWFtaW5nIHRyYW5zYWN0aW9uIHVzaW5nIHRoZSBw YXJhbGxlbCBhcHBseQorIyB3b3JrZXIgYWZ0ZXIgdGhpcyByZXRyeSBzdWNjZWVkcy4KKyMgPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQorCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywKKwkiQ1JFQVRFIFVOSVFVRSBJTkRFWCBpZHhfdGFiIG9uIHRlc3RfdGFiXzIoYSkiKTsKKwor IyBDaGVjayB0aGUgc3Vic2NyaWJlciBsb2cgZnJvbSBub3cgb24uCiskb2Zmc2V0ID0gLXMgJG5v ZGVfc3Vic2NyaWJlci0+bG9nZmlsZTsKKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCisJ J3Bvc3RncmVzJywgcXF7CitCRUdJTjsKK0lOU0VSVCBJTlRPIHRlc3RfdGFiXzIgU0VMRUNUIGkg RlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgNTAwMCkgcyhpKTsKK0lOU0VSVCBJTlRPIHRlc3RfdGFi XzIgdmFsdWVzKDEpOworQ09NTUlUO30pOworCisjIENoZWNrIGlmIHRoZSBwYXJhbGxlbCBhcHBs eSB3b3JrZXIgaXMgbm90IHN0YXJ0ZWQgYmVjYXVzZSB0aGUgYWJvdmUKKyMgdHJhbnNhY3Rpb24g ZmFpbGVkIHRvIGJlIGFwcGxpZWQuCiskbm9kZV9zdWJzY3JpYmVyLT53YWl0X2Zvcl9sb2coCisJ cXIvREVCVUc6ICggW0EtWjAtOV0rOik/IHBhcmFsbGVsIGFwcGx5IHdvcmtlcnMgYXJlIG5vdCB1 c2VkIGZvciByZXRyaWVzLywKKwkkb2Zmc2V0KTsKKworIyBEcm9wIHRoZSB1bmlxdWUgaW5kZXgg b24gdGhlIHN1YnNjcmliZXIsIG5vdyBpdCB3b3Jrcy4KKyRub2RlX3N1YnNjcmliZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAiRFJPUCBJTkRFWCBpZHhfdGFiIik7CisKKyMgV2FpdCBmb3IgdGhp cyBzdHJlYW1pbmcgdHJhbnNhY3Rpb24gdG8gYmUgYXBwbGllZCBpbiB0aGUgYXBwbHkgd29ya2Vy LgorJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKKworJHJlc3Vs dCA9CisgICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNv dW50KCopIEZST00gdGVzdF90YWJfMiIpOworaXMoJHJlc3VsdCwgcXEoNTAwMSksICdkYXRhIHJl cGxpY2F0ZWQgdG8gc3Vic2NyaWJlciBhZnRlciBkcm9wcGluZyBpbmRleCcpOworCisjIEFmdGVy IHN1Y2Nlc3NmdWxseSByZXRyeWluZyB0byBhcHBseSBhIGZhaWxlZCBzdHJlYW1pbmcgdHJhbnNh Y3Rpb24sIGFwcGx5CisjIHRoZSBmb2xsb3dpbmcgc3RyZWFtaW5nIHRyYW5zYWN0aW9uIHVzaW5n IHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIuCisKKyMgQ2hlY2sgdGhlIHN1YnNjcmliZXIgbG9n IGZyb20gbm93IG9uLgorJG9mZnNldCA9IC1zICRub2RlX3N1YnNjcmliZXItPmxvZ2ZpbGU7CisK KyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIklOU0VSVCBJTlRPIHRl c3RfdGFiXzIgU0VMRUNUIGkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoNTAwMSwgMTAwMDApIHMoaSki KTsKKworY2hlY2tfcGFyYWxsZWxfbG9nKCRub2RlX3N1YnNjcmliZXIsICRvZmZzZXQsIDEsICdD T01NSVQnKTsKKworJHJlc3VsdCA9CisgICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIEZST00gdGVzdF90YWJfMiIpOworaXMoJHJlc3VsdCwg cXEoMTAwMDEpLAorCSdkYXRhIHJlcGxpY2F0ZWQgdG8gc3Vic2NyaWJlciB1c2luZyB0aGUgcGFy YWxsZWwgYXBwbHkgd29ya2VyJyk7CisKICRub2RlX3N1YnNjcmliZXItPnN0b3A7CiAkbm9kZV9w dWJsaXNoZXItPnN0b3A7CiAKLS0gCjIuMjMuMC53aW5kb3dzLjEKCg== --_006_OS0PR01MB5716C2CC59810717EC9601EE94FA9OS0PR01MB5716jpnp_--