From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) by sourceware.org (Postfix) with ESMTPS id 93427385801E for ; Tue, 10 Aug 2021 13:40:05 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 93427385801E Received: from pps.filterd (m0246629.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.16.0.43/8.16.0.43) with SMTP id 17ADaPpR005866; Tue, 10 Aug 2021 13:40:03 GMT Received: from aserp3020.oracle.com (aserp3020.oracle.com [141.146.126.70]) by mx0b-00069f02.pphosted.com with ESMTP id 3abt4482m7-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 10 Aug 2021 13:40:02 +0000 Received: from pps.filterd (aserp3020.oracle.com [127.0.0.1]) by aserp3020.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 17ADaMUO056329; Tue, 10 Aug 2021 13:40:01 GMT Received: from nam10-mw2-obe.outbound.protection.outlook.com (mail-mw2nam10lp2106.outbound.protection.outlook.com [104.47.55.106]) by aserp3020.oracle.com with ESMTP id 3a9vv4r3kp-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 10 Aug 2021 13:40:01 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=lHEr7eeCc3dFxdTy9K8jWR00ro+PfSgsRrnZCd/HZli/SVaomCSXSOunzZY/I2dSWPvguj+NerHBqAklMPuOVHPizKTuSI/ZL+hbs6OekMqyW19uCOb1tvQ7FkJrnt4dEepf6/Yy2efBGrXUZ75JZdbCZekbV324/cSlROWysYLPBzdrh9yzADHzSz9FksOqNbeYoPbeEIg5dMjGsv675oDcnZOQYd8aofx14eCidFcwq43KNcuFUzALEwTY/5oBB9S9mmxW9Zo/y+nnoGOvttfRxIKhgoMIAzmq4/lw1rO/2nJfHXaa0ic0VG5I+2mky4Q0sOmpHLHmb0QmdSrPDw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ai80bzATB0aEu4BJUm/y0uAYfD979jG/jYDyvX/TmMU=; b=EoT96PUP1ee9oMg9GTFZAbei2iIYcPzzmc59BWPGxvqnEgZYOlr+BWYogWGgejHeHd0t/Ouy6GZB2CrEuwTmOZmTNQPaqWLphBlovj1SIBEU4dMs8TE2qTEFWFNDMotjs/qasXKRbE9/E3zlWE/I9VtoqPWGWKpKVqs5vTnaOxKgTJrcpIEkPaYWSv65t7tD+Nhvpl1P15HHS0eA2IquLNQIwUGcv1AI0ctQiTXjga2c1Syb+d0GdgYreikKhuRqMMJuYiX6aP80jOx3C7A0OqpU++UjDm14pHMB6mLFkg5sETUMRRHHBnTDdkTqhVXRlj9EPFN8z/bAIE++jZWXYg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none Received: from CH2PR10MB4344.namprd10.prod.outlook.com (2603:10b6:610:af::19) by CH0PR10MB5275.namprd10.prod.outlook.com (2603:10b6:610:c5::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4394.17; Tue, 10 Aug 2021 13:39:59 +0000 Received: from CH2PR10MB4344.namprd10.prod.outlook.com ([fe80::f463:6b71:2491:d547]) by CH2PR10MB4344.namprd10.prod.outlook.com ([fe80::f463:6b71:2491:d547%9]) with mapi id 15.20.4415.014; Tue, 10 Aug 2021 13:39:59 +0000 From: Qing Zhao To: Richard Biener CC: Martin Jambor , Jakub Jelinek , Kees Cook , Nick Alcock via Gcc-patches , Richard Biener Subject: Re: [patch][version 6] add -ftrivial-auto-var-init and variable attribute "uninitialized" to gcc Thread-Topic: [patch][version 6] add -ftrivial-auto-var-init and variable attribute "uninitialized" to gcc Thread-Index: AQHXgpcfj6SO0Rka1UmU0GU91mFncqtrSzIAgAApjACAAPr8gIAAZYMA Date: Tue, 10 Aug 2021 13:39:59 +0000 Message-ID: References: <52E29277-1403-4755-901A-528116C43FB8@oracle.com> <58ADBC0C-9D44-485B-BB5A-B072664B9C4F@oracle.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-mailer: Apple Mail (2.3608.120.23.2.7) x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 9acd8543-1a3d-4d8f-3d67-08d95c045915 x-ms-traffictypediagnostic: CH0PR10MB5275: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:2399; x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: K5e5w+6R9wYhkH7cCo3Dlbj4g8MFip021SUHH9VBaoo/5LTLfmaVZ7eRTit87o1UWR3ZzUrm8TDboAfQP5hguJbtVcSwS/sVIr99ElLFlI391HYM3w39eyNB0cKurrVQyL2Kxc3bpoq/xNsFh8/xo57saMguRkIEYGHjUrY5AKgqVz6vt9Clkr61ssyqYTcyiOsbISoY3Hgp0AdwJuJyVJywm+jE4akLXV+nNsN4eAwzXYgYgsc8JftND7+NM1Seu3fRTahCZVziPbqCf6uNEw3lOTkCAo8WpWQHZ3BI/z9j09ZdaWJ99mK/oR23erjyUw4yA8vH/CEgAFLwD8XO3Abbr5X9pcOB1csIR5fmCx+1Na3mStMIuDGrgGalsOqHJTqYmZukY2BtTtM9xmeJkvgB2zefbT1Ux4f9j8LsNyvO5M6BliUUMfW0QIjDBwDIMONpIRc2YG1HD6YAHFkHXwe2LhYeWA7fbqvqZubFTDBrxj9AYfW+5M79dLYbW3zAX9HthdT3giMbwWwlTbec+YB6Wnqk7lU4h3c7pvyzvjFyL1WsbdRPVOcE+e47FCWdCCiHBtMDhVHEALzowv1yy4JxGqDPfJFN+7oNgctHRXtFqtNUP6N50WvCFqV/VD91OTLEwfZwIooosdaW2b012yVk6nXcPCw+UZaXPwkblQy9c0QzbeQ+XOo3V9xUysxsPM8UElw4/yrHXXY8pZDm+ULUJAh7IZqDZmciHnCgaJfWush2iGevYl4mL6gx/71CMYFalacm6hOQ/wLwFKCsIJvkv2HvNDVzpuI7k+NlfJBRAdGaj/bWb+3vK3GVLSFw8Xyvzy8hz8ZIePiYKFsECUfhlYvfCAKEOODREMT4Z/s= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:CH2PR10MB4344.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(366004)(33656002)(8936002)(71200400001)(53546011)(54906003)(6512007)(76116006)(186003)(6486002)(86362001)(8676002)(91956017)(83380400001)(966005)(6506007)(66574015)(66476007)(30864003)(38100700002)(316002)(508600001)(4326008)(2906002)(6916009)(64756008)(44832011)(36756003)(122000001)(66946007)(5660300002)(38070700005)(66556008)(2616005)(66446008)(45980500001)(266184004); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?L2JoaHJHUE81b0s4ZENFWDA2aG1FSkhuNVR4eDluV2tNdGRDcWZnbjFZc0pS?= =?utf-8?B?SVk4eW1SRFdwYm95T0ZUZUUrbTNlWU53Syt0KzlPUWdMd0psNHRSajlQY3k1?= =?utf-8?B?UFN4d3RLblg5SHdUNnBwanFjUVF2aHUrVmo3L0ZPR3B3RDRiRE1YZXFBdnBG?= =?utf-8?B?WVlIRlRxaVFjay96b3FqK3piRkFZVHdVdWdCVHhqeE5iTGZYYlFMRmxCa2oz?= =?utf-8?B?NlpqcWpERE90ZEZwK1ZMY2tvQ0JvQlZtaXkwdkwzMkcvQlp3R0xzWTVIdnVR?= =?utf-8?B?TW1TMnlQdDZIaUVwTGtDbk9iNDhwcko5QVJDd3lndFYyRkJKMWVKaWRDYnpv?= =?utf-8?B?b0lna2tWSVB6L1NvQ2lZRWIvWTYrQ0Q3UmFhdStuSE9oMmFmODYrd0JycmJl?= =?utf-8?B?bE1MK2tUWVE2WUY5TTBadCtqOHg1WHB3SkhFKzZHMmNXcTBUeWtyeUNFWjVO?= =?utf-8?B?Zzc5THhDbUZDUzkxK09oWVFqMGJmdlU1WUp1aDltR2x1NVh5dXQ0TmJjRGZF?= =?utf-8?B?MHdxV3FucWEyam9nWVZ6RGNNbkNSc3h5YURqQ3EwTmlNTk1lcXZHc2t3T1Ft?= =?utf-8?B?UE5vZXdKNmNnQUxLa1UyL2g3Y1UyS1ZmTlpLaFNKcW56STVzQy9jOUlKSVdU?= =?utf-8?B?bzk2SzhMTEJIbmVRc2o2dTJHMnFTN2ZySGRDaWFkUklrMGwwejAxTGhYK1JG?= =?utf-8?B?SkVkNXVoV3ZUeGNQOUJBQjY4MGl2Y0E5V3VDYWhyQWNsUkJtZkN6UE4wNVk1?= =?utf-8?B?eDJURXM2dVk0L2lXMDRGZVBUSEJ1MExhOHhNcFlDTmJUSWpxTW5uWWpIRlBV?= =?utf-8?B?aUNDeTVaUU9mSWpaMmZBZlRmeHlZNDNFdVVzWkFHU0owdnFpaFd3bEw0Wnh0?= =?utf-8?B?Wnl4UDViN3FRbE9QTTNtRW1TcXRCNDdFZ2hnK2MxWGZ4dGZpUlBLOWM3R01Q?= =?utf-8?B?Q0pYNjNIdzFoa093MEJxMmlPVWVITmg5bnMwV1ZCYll2WGRDNWVFWC9ReVJV?= =?utf-8?B?N21PYlkvMXd5eHhhTGZqQnpoNVkwZmVMSE1MQ0RXNlIwRzFzWGpidmNLNWdz?= =?utf-8?B?MDFncTVyRUZwN3lNdjQ2VnNQalVaanBlQVlxeEw4WlhXWkhrT3lFZXFCb25O?= =?utf-8?B?Wk5rWnlWYTdXNENiTlZ3REpUaGhaL0hIMmMxV1hyaFZxSm5TL0poUHNvVGxs?= =?utf-8?B?Nnk1cWFLWktzemszclN0TXZyUU15NGFwNEtGKzRpSzErUlY3dS9GY0JmZjBO?= =?utf-8?B?dVRPcmRtZ2FvTU9QdWxiMmNrSm9zNzZsVlJod1c5dW5wd3hrbS9rUUNnOFlW?= =?utf-8?B?OXAzbVFNbnNjV1hFRDRETkEzcTczcnd5NEtIVVJ6Z2F5THVLUkQ4RkZCRWhp?= =?utf-8?B?T2NEcWl6dXJGaUljR0dGNzFxeFpCTngweUhYbXNUZWg1WUNjUENUUzVTUlBS?= =?utf-8?B?WG1mMUpFZ01NUXVrUUkzS0NIdmk1K0tWQ2dnWURFMFFPVkdoMHRaSGFvWHl3?= =?utf-8?B?Q2RMQ1BVeHFXTDJiMzNTWklZN2xYUnkzM0ozMVNidWRFZkViVmh0emt3YkdS?= =?utf-8?B?RzdZMk1ySHFYcHh4b3c5dlUrR1BkVG05Z1lHQmVvdGFFKzBGNE1RRXNjYWZn?= =?utf-8?B?NUhRdE8zZUNzYU9ydHErcDNUUGJqTkp3Z09ZbDFlU1R4eTJkZHppSVBVV0lt?= =?utf-8?B?MGlPaE1RK1p6bTlGS3hLcVhJRTIzdWNXT2pCWTY5cDhlbkovWVp6K0FsZlRw?= =?utf-8?B?WTlRbEFEUkNCRVA1N3g2SkRqbGtnN216TmtWblZGMkVrUnRXU1hPK0ZUQU1m?= =?utf-8?B?M2VFTk5McGFYb2c1N0RzbU9SdmpsbGdaQlFVZU9qdWRvOUJLQTVBM0c2Z2x1?= =?utf-8?Q?R8U9Gp2HGWjiw?= x-ms-exchange-transport-forked: True Content-Type: text/plain; charset="utf-8" Content-ID: <495C0F5118F032479F314770ED78009C@namprd10.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CH2PR10MB4344.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9acd8543-1a3d-4d8f-3d67-08d95c045915 X-MS-Exchange-CrossTenant-originalarrivaltime: 10 Aug 2021 13:39:59.2759 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: MzmBxpKHnNeezwi5xtTK8ihwFPrSz/vHiMZEL1aLR86eF6PXk6a4wMlMKirwsDbzTzlZHOy0pqityzf7QlWuXA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH0PR10MB5275 X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=10071 signatures=668682 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 suspectscore=0 mlxscore=0 phishscore=0 spamscore=0 mlxlogscore=999 malwarescore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2107140000 definitions=main-2108100087 X-Proofpoint-ORIG-GUID: EK3I_8Tn7rjIEATm3KstaDhJ1nFXFwX8 X-Proofpoint-GUID: EK3I_8Tn7rjIEATm3KstaDhJ1nFXFwX8 X-Spam-Status: No, score=-4.1 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, KAM_SHORT, RCVD_IN_DNSWL_LOW, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 10 Aug 2021 13:40:16 -0000 DQoNCj4gT24gQXVnIDEwLCAyMDIxLCBhdCAyOjM2IEFNLCBSaWNoYXJkIEJpZW5lciA8cmd1ZW50 aGVyQHN1c2UuZGU+IHdyb3RlOg0KPiANCj4gT24gTW9uLCA5IEF1ZyAyMDIxLCBRaW5nIFpoYW8g d3JvdGU6DQo+IA0KPj4gSGksIFJpY2hhcmQsDQo+PiANCj4+IFRoYW5rcyBhIGxvdCBmb3IgeW91 IHJldmlldy4NCj4+IA0KPj4gQWx0aG91Z2ggdGhlc2UgY29tbWVudHMgYXJlIG5vdCBtYWRlIG9u IHRoZSBsYXRlc3QgcGF0Y2ggKDd0aCB2ZXJzaW9uKSA6LSksIGFsbCB0aGUgY29tbWVudHMgYXJl IHZhbGlkIHNpbmNlIHRoZSBwYXJ0cyB5b3UgY29tbWVudGVkDQo+PiBhcmUgbm90IGNoYW5nZWQg aW4gdGhlIDd0aCB2ZXJzaW9uLg0KPj4gDQo+PiANCj4+PiBPbiBBdWcgOSwgMjAyMSwgYXQgOTow OSBBTSwgUmljaGFyZCBCaWVuZXIgPHJndWVudGhlckBzdXNlLmRlPiB3cm90ZToNCj4+PiANCj4+ PiBPbiBUdWUsIDI3IEp1bCAyMDIxLCBRaW5nIFpoYW8gd3JvdGU6DQo+Pj4gDQo+Pj4+IEhpLA0K Pj4+PiANCj4+Pj4gVGhpcyBpcyB0aGUgNnRoIHZlcnNpb24gb2YgdGhlIHBhdGNoIGZvciB0aGUg bmV3IHNlY3VyaXR5IGZlYXR1cmUgZm9yIEdDQy4NCj4+Pj4gDQo+Pj4+IEkgaGF2ZSB0ZXN0ZWQg aXQgd2l0aCBib290c3RyYXAgb24gYm90aCB4ODYgYW5kIGFhcmNoNjQsIHJlZ3Jlc3Npb24gdGVz dGluZyBvbiBib3RoIHg4NiBhbmQgYWFyY2g2NC4NCj4+Pj4gQWxzbyBjb21waWxlIENQVTIwMTcg KHJ1bm5pbmcgaXMgb25nb2luZyksIHdpdGhvdXQgYW55IGlzc3VlLiAoV2l0aCB0aGUgZml4IHRv IGJ1ZyBodHRwczovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD0xMDE1ODYp Lg0KPj4+PiANCj4+Pj4gUGxlYXNlIHRha2UgYSBsb29rIGFuZCBsZXQgbWUga25vdyBhbnkgaXNz dWUuDQo+Pj4gDQo+Pj4gKy8qIEhhbmRsZSBhbiAidW5pbml0aWFsaXplZCIgYXR0cmlidXRlOyBh cmd1bWVudHMgYXMgaW4NCj4+PiArICAgc3RydWN0IGF0dHJpYnV0ZV9zcGVjLmhhbmRsZXIuICAq Lw0KPj4+ICsNCj4+PiArc3RhdGljIHRyZWUNCj4+PiAraGFuZGxlX3VuaW5pdGlhbGl6ZWRfYXR0 cmlidXRlICh0cmVlICpub2RlLCB0cmVlIG5hbWUsIHRyZWUgQVJHX1VOVVNFRCANCj4+PiAoYXJn cyksDQo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgQVJHX1VOVVNFRCAo ZmxhZ3MpLCBib29sIA0KPj4+ICpub19hZGRfYXR0cnMpDQo+Pj4gK3sNCj4+PiArICBpZiAoIVZB Ul9QICgqbm9kZSkpDQo+Pj4gKyAgICB7DQo+Pj4gKyAgICAgIHdhcm5pbmcgKE9QVF9XYXR0cmli dXRlcywgIiVxRSBhdHRyaWJ1dGUgaWdub3JlZCIsIG5hbWUpOw0KPj4+ICsgICAgICAqbm9fYWRk X2F0dHJzID0gdHJ1ZTsNCj4+PiArICAgIH0NCj4+PiANCj4+PiB5b3UgYXJlIGRvY3VtZW50aW5n IHRoaXMgYXR0cmlidXRlIGZvciBhdXRvbWF0aWMgdmFyaWFibGVzIGJ1dA0KPj4+IGhlcmUgeW91 IGFsbG93IHBsYWNlbWVudCBvbiBnbG9iYWxzIGFzIHdlbGwgKG5vdCBzdXJlIGlmIGF0IHRoaXMN Cj4+PiBwb2ludCBUUkVFX1NUQVRJQyAvIERFQ0xfRVhURVJOQUwgYXJlIHNldCBjb3JyZWN0bHkp Lg0KPj4gDQo+PiBSaWdodCwgSSBzaG91bGQgd2FybiB3aGVuIHRoZSBhdHRyaWJ1dGUgaXMgcGxh Y2VkIGZvciBnbG9iYWxzIG9yIHN0YXRpYyB2YXJpYWJsZXMuIA0KPj4gSSB3aWxsIHRyeSBUUkVF X1NUQVRJQy9ERUNMX0VYVEVSTkFMIHRvIHNlZSB3aGV0aGVyIGl04oCZcyB3b3JrIG9yIG5vdC4N Cj4+IA0KPj4+IA0KPj4+ICsgIC8qIGZvciBsYW5ndWFnZXMgdGhhdCBkbyBub3Qgc3VwcG9ydCBC VUlMVF9JTl9DTEVBUl9QQURESU5HLCBjcmVhdGUgdGhlDQo+Pj4gKyAgICAgZnVuY3Rpb24gbm9k ZSBmb3IgcGFkZGluZyBpbml0aWFsaXphdGlvbi4gICovDQo+Pj4gKyAgaWYgKCFmbikNCj4+PiAr ICAgIHsNCj4+PiArICAgICAgdHJlZSBmdHlwZSA9IGJ1aWxkX2Z1bmN0aW9uX3R5cGVfbGlzdCAo dm9pZF90eXBlX25vZGUsDQo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcHRyX3R5cGVfbm9kZSwNCj4+PiANCj4+PiB0aGUgImFwcHJvcHJpYXRlIiBwbGFj ZSB0byBkbyB0aGlzIHdvdWxkIGJlIA0KPj4+IHRyZWUuYzpidWlsZF9jb21tb25fYnVpbHRpbl9u b2Rlcw0KPj4gDQo+PiBTdXJlLCB3aWxsIG1vdmUgdGhlIGNyZWF0aW9uIG9mICBmdW5jdGlvbiBu b2RlIG9mIEJVSUxUX0lOX0NMRUFSX1BBRERJTkcgZm9yIEZvcnRyYW4gZXRjLiB0byB0cmVlLmM6 YnVpbGRfY29tbW9uX2J1aWx0aW5fbm9kZXMuDQo+PiANCj4+PiANCj4+PiBZb3Ugc2VlbSB0byBt YXJzaGFsbCB0aGUgaXNfdmxhIGFyZ3VtZW50IGFzIGZvcl9hdXRvX2luaXQgd2hlbg0KPj4+IGV4 cGFuZGluZy9mb2xkaW5nIHRoZSBidWlsdGluIGFuZCB0aGVyZSBpdCdzIHVzZWQgdG8gc3VwcHJl c3MNCj4+PiBkaWFnbm9zdGljcyAoYW5kIG1ha2UgY292ZXJlZCBwaWVjZXMgbm90IGluaXRpYWxp emVkPykuDQo+PiANCj4+IFllcywgSSBhZGRlZCBhbiBleHRyYSBhcmd1bWVudCDigJxmb3JfYXV0 b19pbml04oCdIGZvciDigJxCVUlMVF9JTl9DTEVBUl9QQURESU5H4oCdLCB0aGlzIGFyZ3VtZW50 IGlzIGFkZGVkIHRvIHN1cHByZXNzIGVycm9ycyBlbWl0dGVkIGR1cmluZyBmb2xkaW5nDQo+PiBC VUlMVF9JTl9DTEVBUl9QQURESU5HIGZvciBmbGV4aWJsZSBhcnJheSBtZW1iZXIgLiBTdWNoIGVy cm9ycyBzaG91bGQgTm90IGJlIGVtaXR0ZWQgd2hlbiDigJxCVUlMVF9JTl9DTEVBUl9QQURESU5H 4oCdIGlzIGNhbGxlZCB3aXRoIGNvbXBpbGVyIGF1dG9tYXRpYyBpbml0aWFsaXphdGlvbi4NCj4+ IFBsZWFzZSBzZWUgaHR0cHM6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9 MTAxNTg2LCBjb21tZW50ICM2IGZyb20gSmFrdWIgSmVsaW5lay4NCj4+IA0KPj4+IEkgc3VnZ2Vz dA0KPj4+IHRvIHJlLW5hbWUgaXNfdmxhL2Zvcl9hdXRvX2luaXQgdG8gc29tZXRoaW5nIG1vcmUg ZGVzY3JpcHRpdmUuDQo+PiANCj4+IE9rYXksIEkgd2lsbC4gDQo+Pj4gDQo+Pj4gKyAgIGdpbXBs ZV9mb2xkX2J1aWx0aW5fY2xlYXJfcGFkZGluZy4gSWYgRk9SX0FVVE9fSU5JVCwNCj4+PiArICAg bm90IGVtaXQgc29tZSBvZiB0aGUgZXJyb3IgbWVzc2FnZXMgc2luY2UgZG9pbmcgdGhhdA0KPj4+ ICsgICBtaWdodCBjb25mdXNlIHRoZSBlbmQgdXNlci4gICovDQo+Pj4gDQo+Pj4gZG9lc24ndCBl eHBsYWluIHRvIG1lIHdoZXRoZXIgZXJyb3JzIHN0aWxsIG1pZ2h0IGJlIHJhaXNlZCBvcg0KPj4+ IHdoYXQgdGhlIGFjdHVhbCBiZWhhdmlvciBpcy4NCj4+IA0KPj4gT2theSwgd2lsbCBtYWtlIHRo aXMgbW9yZSBjbGVhciBpbiB0aGUgY29tbWVudHMuDQo+PiANCj4+PiANCj4+PiArc3RhdGljIGdp bXBsZSAqDQo+Pj4gK2J1aWxkX2RlZmVycmVkX2luaXQgKHRyZWUgZGVjbCwNCj4+PiArICAgICAg ICAgICAgICAgICAgICBlbnVtIGF1dG9faW5pdF90eXBlIGluaXRfdHlwZSwNCj4+PiArICAgICAg ICAgICAgICAgICAgICBib29sIGlzX3ZsYSkNCj4+PiArew0KPj4+ICsgIGdjY19hc3NlcnQgKChp c192bGEgJiYgVFJFRV9DT0RFIChkZWNsKSA9PSBXSVRIX1NJWkVfRVhQUikNCj4+PiArICAgICAg ICAgICAgIHx8ICghaXNfdmxhICYmIFRSRUVfQ09ERSAoZGVjbCkgIT0gV0lUSF9TSVpFX0VYUFIp KTsNCj4+PiANCj4+PiBzbyB0aGUgaXNfdmxhIHBhcmFtZXRlciBsb29rcyByZWR1bmRhbnQgKGFu ZCB0aGUgYXNzZXJ0IGRhbmdlcm91cz8pLg0KPj4+IEVpdGhlciB0aGUgY2FsbGVyIGtub3dzIGl0 IGRlYWxzIHdpdGggYSBWTEEsIHRoZW4gdGhhdCBzaG91bGQgYmUNCj4+PiBwYXNzZWQgdGhyb3Vn aCAtIGNvbnN0YW50IHNpemVzIGNhbiBhbHNvIGxhdGVyIGFwcGVhciBkdXJpbmcNCj4+PiBvcHRp bWl6YXRpb24gYWZ0ZXIgYWxsIC0gb3IgaXNfdmxhIHNob3VsZCBiZSBkZXRlcm1pbmVkIGhlcmUN Cj4+PiBiYXNlZCBvbiB3aGV0aGVyIHRoZSBzaXplIGF0IGdpbXBsaWZpY2F0aW9uIHRpbWUgaXMg Y29uc3RhbnQuDQo+PiANCj4+IFRoZSByb3V0aW5lIOKAnGJ1aWxkX2RlZmVycmVkX2luaXTigJ0g aXMgT05MWSBjYWxsZWQgZHVyaW5nIGdpbXBsaWZpY2F0aW9uIHBoYXNlIGJ5IHRoZSByb3V0aW5l IOKAnGdpbXBsZV9hZGRfaW5pdF9mb3JfYXV0b192YXIiLCBhdCB0aGlzIHBsYWNlLA0KPj4gSXNf dmxhIHNob3VsZCBiZSBkZXRlcm1pbmVkIGJ5IHRoZSBjYWxsZXIgdG8gY2hlY2sgdGhlIHNpemUg b2YgdGhlIERFQ0wuIElmIGl04oCZcyBhIHZsYSwgdGhlIOKAnG1heWJlX3dpdGhfc2l6ZV9leHBy 4oCdIHdpbGwgYmUgYXBwbGllZCBmb3INCj4+IERFQ0wgdG8gbWFrZSBpdCB0byBhIFdJVEhfU0la RV9FWFBSLiAgU28sIHRoZSBhc3NlcnRpb24gaXMgcHVyZWx5IHRvIG1ha2Ugc3VyZSB0aGlzIGF0 IGdpbXBsaWZpY2F0aW9uIHBoYXNlLg0KPj4gDQo+PiBZZXMsIHRoZSBzaXplIG9mIHRoZSBWTEEg ZGVjbCBtaWdodCBiZWNvbWUgYSBjb25zdGFudCBsYXRlciBkdWUgdG8gY29uc3RhbnQgcHJvcGFn YXRpb24sIGV0Yy4gIGJ1dCBkdXJpbmcgdGhlIGdpbXBsaWZpY2F0aW9uIHBoYXNlLCB0aGUgYXNz ZXJ0aW9uIHNob3VsZCBiZSB0cnVlLg0KPj4+IA0KPj4+ICsgICAgICAgICAvKiBJZiB0aGUgdXNl ciByZXF1ZXN0cyB0byBpbml0aWFsaXplIGF1dG9tYXRpYyB2YXJpYWJsZXMsIHdlDQo+Pj4gKyAg ICAgICAgICAgIHNob3VsZCBpbml0aWFsaXplIHBhZGRpbmdzIGluc2lkZSB0aGUgdmFyaWFibGUu IEFkZCBhIGNhbGwgdG8NCj4+PiArICAgICAgICAgICAgX19CVUlMVElOX0NMRUFSX1BBRERJTkcg KCZvYmplY3QsIDAsIGZvcl9hdXRvX2luaXQgPSB0cnVlKSB0bw0KPj4+ICsgICAgICAgICAgICBp bml0aWFsaXplIHBhZGRpbmdzIG9mIG9iamVjdCBhbHdheXMgdG8gemVybyByZWdhcmRsZXNzIG9m DQo+Pj4gKyAgICAgICAgICAgIElOSVRfVFlQRS4gICovDQo+Pj4gKyAgICAgICAgIGlmIChvcHRf Zm9yX2ZuIChjdXJyZW50X2Z1bmN0aW9uX2RlY2wsIGZsYWdfYXV0b192YXJfaW5pdCkNCj4+PiAr ICAgICAgICAgICAgICAgPiBBVVRPX0lOSVRfVU5JTklUSUFMSVpFRA0KPj4+ICsgICAgICAgICAg ICAgJiYgVkFSX1AgKG9iamVjdCkNCj4+PiArICAgICAgICAgICAgICYmICFERUNMX0VYVEVSTkFM IChvYmplY3QpDQo+Pj4gKyAgICAgICAgICAgICAmJiAhVFJFRV9TVEFUSUMgKG9iamVjdCkpDQo+ Pj4gKyAgICAgICAgICAgZ2ltcGxlX2FkZF9wYWRkaW5nX2luaXRfZm9yX2F1dG9fdmFyIChvYmpl Y3QsIGZhbHNlLCBwcmVfcCk7DQo+Pj4gKyAgICAgICAgIHJldHVybiByZXQ7DQo+Pj4gDQo+Pj4g SSB0aGluayB5b3Ugd2FudCB0byB1c2UgZWl0aGVyIGF1dG9fdmFyX3AgKG9iamVjdCkgb3INCj4+ PiBhdXRvX3Zhcl9pbl9mbl9wIChvYmplY3QsIGN1cnJlbnRfZnVuY3Rpb25fZGVjbCkuICBEb24n dCB5b3UgYWxzbw0KPj4+IHdhbnQgdG8gY2hlY2sgZm9yIHRoZSAndW5pbml0aWFsaXplZCcgYXR0 cmlidXRlIGhlcmU/ICBJIHN1Z2dlc3QNCj4+PiB0byBhYnN0cmFjdCB0aGUgY2hlY2sgb24gd2hl dGhlciAnb2JqZWN0JyBzaG91bGQgYmUgc3ViamVjdA0KPj4+IHRvIGF1dG9pbml0IHRvIGEgaGVs cGVyIGZ1bmN0aW9uLg0KPj4gDQo+PiBUaGFua3MgZm9yIHRoZSBzdWdnZXN0aW9uLCBJIHdpbGwg ZG8gdGhpcy4NCj4+IA0KPj4gDQo+Pj4gDQo+Pj4gVGhlcmUncyBhbm90aGVyIHBhdGggYWJvdmUg dGhpcyBjYWxsaW5nIGdpbXBsaWZ5X2luaXRfY29uc3RydWN0b3INCj4+PiBmb3IgdGhlIGNhc2Ug b2YNCj4+PiANCj4+PiBjb25zdCBzdHJ1Y3QgUyB4ID0geyAuLi4gfTsNCj4+PiBzdHJ1Y3QgUyB5 ID0geDsNCj4+PiANCj4+PiB3aGVyZSBpdCB3aWxsIHRyeSB0byBpbml0ICd5JyBmcm9tIHRoZSBD VE9SIGRpcmVjdGx5LCBpdCBzZWVtcyB5b3UNCj4+PiBkbyBub3QgY292ZXIgdGhpcyBjYXNlLg0K Pj4gDQo+PiBZZXMsIHlvdSBhcmUgcmlnaHQsIHRoaXMgY2FzZSB3YXMgbm90IGNvdmVyZWQgcmln aHQgbm93LCBhbmQgdGhpcyBzaG91bGQgYmUgY292ZXJlZC4NCj4+IA0KPj4gTG9va3MgbGlrZSB0 aGF0IEkgbmVlZCB0byBtb3ZlIHRoZSDigJxnaW1wbGVfYWRkX3BhZGRpbmdfaW5pdF9mb3JfYXV0 b192YXLigJ0gaW5zaWRlIHRoZSByb3V0aW5lIOKAnGdpbXBsaWZ5X2luaXRfY29uc3RydWN0b3Li gJ0gdG8NCj4+IENvdmVyIGFsbCB0aGUgY2FzZXMuIA0KPj4gDQo+Pj4gSSBhbHNvIHRoaW5rIHRo YXQgdGhlIGFib3ZlIHBsYWNlIGFwcGxpZXMNCj4+PiB0byBhbGwgYWdncmVnYXRlIGFzc2lnbm1l bnQgc3RhdGVtZW50cywgbm90IG9ubHkgdG8gSU5JVF9FWFBScz8NCj4+IA0KPj4+IFNvIGRvbid0 IHlvdSB3YW50IHRvIHJlc3RyaWN0IGNsZWFyLXBhZGRpbmcgZW1pdCBoZXJlPw0KPj4gDQo+PiBZ b3UgYXJlIHJpZ2h0LCBJIG1pZ2h0IG5lZWQgdG8gcmVzdHJpY3QgaXQgT25seSB0byBJTklUX0VY UFIuIA0KPj4gV2lsbCB1cGRhdGUuDQo+PiANCj4+PiANCj4+PiArc3RhdGljIHZvaWQNCj4+PiAr ZXhwYW5kX0RFRkVSUkVEX0lOSVQgKGludGVybmFsX2ZuLCBnY2FsbCAqc3RtdCkNCj4+PiArew0K Pj4+ICsgIHRyZWUgdmFyID0gZ2ltcGxlX2NhbGxfbGhzIChzdG10KTsNCj4+PiArICB0cmVlIHNp emVfb2ZfdmFyID0gZ2ltcGxlX2NhbGxfYXJnIChzdG10LCAwKTsNCj4+PiArICB0cmVlIHZsYWFk ZHIgPSBOVUxMX1RSRUU7DQo+Pj4gKyAgdHJlZSB2YXJfdHlwZSA9IFRSRUVfVFlQRSAodmFyKTsN Cj4+PiArICBib29sIGlzX3ZsYSA9IChib29sKSBUUkVFX0lOVF9DU1RfTE9XIChnaW1wbGVfY2Fs bF9hcmcgKHN0bXQsIDIpKTsNCj4+PiArICBlbnVtIGF1dG9faW5pdF90eXBlIGluaXRfdHlwZQ0K Pj4+ICsgICAgPSAoZW51bSBhdXRvX2luaXRfdHlwZSkgVFJFRV9JTlRfQ1NUX0xPVyAoZ2ltcGxl X2NhbGxfYXJnIChzdG10LCAxKSk7DQo+Pj4gKw0KPj4+ICsgIGdjY19hc3NlcnQgKGluaXRfdHlw ZSA+IEFVVE9fSU5JVF9VTklOSVRJQUxJWkVEKTsNCj4+PiArDQo+Pj4gKyAgLyogaWYgdGhpcyB2 YXJpYWJsZSBpcyBhIFZMQSwgZ2V0IGl0cyBTSVpFIGFuZCBBRERSIGZpcnN0LiAgKi8NCj4+PiAr ICBpZiAoaXNfdmxhKQ0KPj4+ICsgICAgew0KPj4+ICsgICAgICAvKiBUaGUgdGVtcG9yYXJ5IGFk ZHJlc3MgdmFyaWFibGUgZm9yIHRoaXMgdmxhIHNob3VsZCBoYXZlIGJlZW4NCj4+PiArICAgICAg ICBjcmVhdGVkIGR1cmluZyBnaW1wbGlmaWNhdGlvbiBwaGFzZS4gIFJlZmVyIHRvIGdpbXBsaWZ5 X3ZsYV9kZWNsDQo+Pj4gKyAgICAgICAgZm9yIGRldGFpbHMuICAqLw0KPj4+ICsgICAgICB0cmVl IHZhcl9kZWNsID0gKFRSRUVfQ09ERSAodmFyKSA9PSBTU0FfTkFNRSkgPw0KPj4+ICsgICAgICAg ICAgICAgICAgICAgICAgU1NBX05BTUVfVkFSICh2YXIpIDogdmFyOw0KPj4+ICsgICAgICBnY2Nf YXNzZXJ0IChERUNMX0hBU19WQUxVRV9FWFBSX1AgKHZhcl9kZWNsKSk7DQo+Pj4gKyAgICAgIGdj Y19hc3NlcnQgKFRSRUVfQ09ERSAoREVDTF9WQUxVRV9FWFBSICh2YXJfZGVjbCkpID09IA0KPj4+ IElORElSRUNUX1JFRik7DQo+Pj4gKyAgICAgIC8qIEdldCB0aGUgYWRkcmVzcyBvZiB0aGlzIHZs YSB2YXJpYWJsZS4gICovDQo+Pj4gKyAgICAgIHZsYWFkZHIgPSBUUkVFX09QRVJBTkQgKERFQ0xf VkFMVUVfRVhQUiAodmFyX2RlY2wpLCAwKTsNCj4+PiANCj4+PiBlcnIgLSBpc24ndCB0aGUgYWRk cmVzcyBvZiB0aGUgZGVjbCByZXByZXNlbnRlZCBieSB0aGUgTEhTIA0KPj4+IHJlZ2FyZGxlc3Mg d2hldGhlciB0aGlzIGlzIGEgVkxBIG9yIG5vdD8NCj4+IA0KPj4gVGhlIExIUyBvZiB0aGUgY2Fs bCB0byAuREVGRVJSRURfSU5JVCBpcyB0aGUgREVDTCBpdHNlbGYgd2hhdGV2ZXIgaXTigJlzIGEg VkxBIG9yIG5vdC4gDQo+PiANCj4+IEluIG9yZGVyIHRvIGNyZWF0ZSBhIG1lbXNldCBjYWxsLCB3 ZSBuZWVkIHRoZSBBZGRyZXNzIG9mIHRoaXMgREVDTCBhcyB0aGUgZmlyc3QgYXJndW1lbnQuIA0K Pj4gSWYgdGhlIERFQ0wgaXMgbm90IGEgVkxBLCB3ZSBqdXN0IHNpbXBseSBhcHBseSDigJxidWls ZF9mb2xkX2FkZHJfZXhwcuKAnSBvbiB0aGlzIERFQ0wgdG8gZ2V0IGl0cyBhZGRyZXNzLA0KPj4g SG93ZXZlciwgZm9yIFZMQSwgZHVyaW5nIGdpbXBsaWZpY2F0aW9uIHBoYXNlIOKAnGdpbXBsaWZ5 X3ZsYV9kZWNs4oCdLCB3ZSBoYXZlIGFscmVhZHkgY3JlYXRlZCBhIHRlbXBvcmFyeQ0KPj4gYWRk cmVzcyB2YXJpYWJsZSBmb3IgdGhpcyBERUNMLCBhbmQgcmVjb3JkZWQgdGhpcyBhZGRyZXNzIHZh cmlhYmxlIHdpdGgg4oCcREVDTF9WQUxVRV9FWFBSKERFQ0wpLCANCj4+IFdlIHNob3VsZCB1c2Ug dGhpcyBhbHJlYWR5IGNyZWF0ZWQgYWRkcmVzcyB2YXJpYWJsZSAgZm9yIFZMQXMuIA0KPiANCj4g U28gdGhlIGlzc3VlIGlzIHRoYXQgdGhlIExIUyBvZiB0aGUgLkRFRkVSUkVEX0lOSVQgY2FsbCBp cyBub3QgcHJvcGVybHkNCj4gZ2ltcGxpZmllZC4gIFdlIHNob3VsZCBub3QgaGF2ZSBzdWNoIGRl Y2wgdGhlcmUgYnV0IEkgc2VlIHdlIGRvIG5vdA0KPiBoYXZlIElMIHZlcmlmaWNhdGlvbiB0aGF0 IGNvdmVycyB0aGlzLg0KDQpEb27igJl0IHF1aXRlIHVuZGVyc3RhbmQgaGVyZTogIGRvIHlvdSBt ZWFuIGFsbCB0aGUgTEhTIG9mIC5ERUZFUlJFRF9JTklUIGNhbGwgYXJlIG5vdCBwcm9wZXJseSBn aW1wbGlmaWVkLCBvcg0KT25seSB0aGUgTEhTIG9mIC5ERUZFUlJFRF9JTklUIGNhbGwgZm9yIFZM QSBhcmUgbm90IHByb3Blcmx5IGdpbXBsaWZpZWQ/DQoNCldoYXQgZG8geW91IG1lYW4gYnkg4oCc c3VjaOKAnSBkZWNsPyBBIGRlY2wgd2hvbGUg4oCcREVDTF9WQUxVRV9FWFBSKERFQ0wp4oCdIGlz IHZhbGlkPw0KDQpRaW5nDQo+IA0KPiBUaGUgZ2ltcGxpZmllciB1c3VhbGx5IGRvZXMgdGhpcyBp biBnaW1wbGlmeV92YXJfb3JfcGFybV9kZWNsLA0KPiBidXQgeW91IGNhbiBvZiBjb3Vyc2Ugc3Vi c3RpdHV0ZSBERUNMX1ZBTFVFX0VYUFIgeW91cnNlbGYgaWYgdGhlDQo+IGRlY2wgd2FzIGFscmVh ZHkgZ2ltcGxpZmllZCAod2FzIGl0PykNCj4gDQo+PiANCj4+PiBMb29raW5nIGF0IERFQ0xfVkFM VUVfRVhQUg0KPj4+IGxvb2tzIHF1aXRlIGZyYWdpbGUgc2luY2UgdGhhdCdzIG5vdCBzdGggZGF0 YSBkZXBlbmRlbmNlIGhvbm9ycy4NCj4+PiBJdCBsb29rcyB5b3Ugb25seSBwYXJ0bHkgZ2ltcGxp ZnkgdGhlIGJ1aWxkIGluaXQgaGVyZT8gIEFsbA0KPj4+IERFQ0xfVkFMVUVfRVhQUnMgc2hvdWxk IGhhdmUgYmVlbiByZXNvbHZlZC4NCj4+IA0KPj4gRG9u4oCZdCBxdWl0ZSB1bmRlcnN0YW5kIGhl cmUuIHlvdSBtZWFuIHRoYXQgYWxsIHRoZSDigJxERUNMX1ZBTFVFX0VYUFJz4oCdIGhhdmUgYmVl biByZXNvbHZlZCBhdCB0aGUgcGhhc2UgUlRMIGV4cGFuc2lvbiwNCj4+IFNvIEkgY2Fubm90IHVz ZSB0aGlzIHRvIGdldCB0aGUgYWRkcmVzcyB2YXJpYWJsZSBvZiB0aGUgVkxBPw0KPj4gDQo+PiAo SG93ZXZlciwgbXkgdW5pdCB0ZXN0aW5nIGNhc2VzIGZvciBWTEFzIGFyZSBhbGwgbG9va3MgZmlu ZSkuDQo+PiANCj4+PiANCj4+PiArICBpZiAoaXNfdmxhIHx8ICghdXNlX3JlZ2lzdGVyX2Zvcl9k ZWNsICh2YXIpKSkNCj4+PiAuLi4NCj4+PiArICBlbHNlDQo+Pj4gKyAgICB7DQo+Pj4gKyAgICAv KiBJZiB0aGlzIHZhcmlhYmxlIGlzIGluIGEgcmVnaXN0ZXIsIHVzZSBleHBhbmRfYXNzaWdubWVu dCBtaWdodA0KPj4+ICsgICAgICAgZ2VuZXJhdGUgYmV0dGVyIGNvZGUuICAqLw0KPj4+IA0KPj4+ IHlvdSBjb21wdXRlIHRoZSBwYXR0ZXIgaW5pdGlhbGl6ZXIgZXZlbiB3aGVuIG5vdCBuZWVkaW5n IGl0LA0KPj4+IHRoYXQncyB3YXN0ZWZ1bC4NCj4+IA0KPj4gT2theSwgSSB3aWxsIHJlc3RyaWN0 IHRoZSBwYXR0ZXJuIGluaXRpYWxpemVyIGNvbXB1dGF0aW9uIHdoZW4gcmVhbGx5IG5lZWRlZC4g DQo+PiANCj4+PiBJdCdzIGFsc28gcXVpdGUgdWdseSwgSU1ITyB5b3Ugc2hvdWxkDQo+Pj4gdXNl IGNhbl9uYXRpdmVfaW50ZXJwcmV0X3R5cGVfcCAodmFyX3R5cGUpIGFuZCBuYXRpdmVfaW50ZXJw cmV0DQo+Pj4gYSBjaGFyIFtdIGFycmF5IGluaXRpYWxpemVkIHRvIHRoZSBwYXR0ZXJuIGFuZCBp Zg0KPj4+ICFjYW5fbmF0aXZlX2ludGVycHJldF90eXBlX3AgKCkgZ28gdGhlIG1lbXNldCByb3V0 ZS4NCj4+IA0KPj4gVGhhbmtzIGZvciB0aGUgc3VnZ2VzdGlvbi4gDQo+PiANCj4+IFdpbGwgdHJ5 IHRoaXMuIA0KPj4gDQo+Pj4gDQo+Pj4gKyAgLyogV2Ugd2lsbCBub3QgdmVyaWZ5IHRoZSBhcmd1 bWVudHMgZm9yIHRoZSBjYWxscyB0byAuREVGRVJSRURfSU5JVC4NCj4+PiArICAgICBTdWNoIGNh bGwgaXMgbm90IGEgcmVhbCBjYWxsLCBqdXN0IGEgcGxhY2Vob2xkZXIgZm9yIGEgbGF0ZXINCj4+ PiArICAgICBpbml0aWFsaXphdGlvbiBkdXJpbmcgZXhwYW5kIHBoYXNlLg0KPj4+ICsgICAgIFRo aXMgaXMgbWFpbmx5IHRvIGF2b2lkIGFzc2VydGlvbiBmYWlsdXJlIGZvciB0aGUgZm9sbG93aW5n DQo+Pj4gKyAgICAgY2FzZToNCj4+PiArDQo+Pj4gKyAgICAgdW5pX3ZhciA9IC5ERUZFUlJFRF9J TklUICh2YXJfc2l6ZSwgSU5JVF9UWVBFLCBpc192bGEpOw0KPj4+ICsgICAgIGZvbyAoJnVuaV92 YXIpOw0KPj4+ICsNCj4+PiArICAgICBpbiB0aGUgYWJvdmUsIHRoZSB1bmluaXRpYWxpemVkIGF1 dG8gdmFyaWFibGUgInVuaV92YXIiIGlzDQo+Pj4gKyAgICAgYWRkcmVzc2FibGUsIHRoZXJlZm9y ZSBzaG91bGQgbm90IGJlIGluIHJlZ2lzdGVycywgcmVzdWx0aW5nDQo+Pj4gKyAgICAgdGhlIGFz c2VydGlvbiBmYWlsdXJlIGluIHRoZSBmb2xsb3dpbmcgYXJndW1lbnQgdmVyaWZpY2F0aW9uLiAg Ki8NCj4+PiArICBpZiAoZ2ltcGxlX2NhbGxfaW50ZXJuYWxfcCAoc3RtdCwgSUZOX0RFRkVSUkVE X0lOSVQpKQ0KPj4+ICsgICAgcmV0dXJuIGZhbHNlOw0KPj4+ICsNCj4+PiAgLyogPz8/ICBUaGUg QyBmcm9udGVuZCBwYXNzZXMgdW5wcm9tb3RlZCBhcmd1bWVudHMgaW4gY2FzZSBpdA0KPj4+ICAg ICBkaWRuJ3Qgc2VlIGEgZnVuY3Rpb24gZGVjbGFyYXRpb24gYmVmb3JlIHRoZSBjYWxsLiAgU28g Zm9yIG5vdw0KPj4+ICAgICBsZWF2ZSB0aGUgY2FsbCBhcmd1bWVudHMgbW9zdGx5IHVudmVyaWZp ZWQuICBPbmNlIHdlIGdpbXBsaWZ5DQo+Pj4gICAgIHVuaXQtYXQtYS10aW1lIHdlIGhhdmUgYSBj aGFuY2UgdG8gZml4IHRoaXMuICAqLw0KPj4+IA0KPj4+IC0gIGZvciAoaSA9IDA7IGkgPCBnaW1w bGVfY2FsbF9udW1fYXJncyAoc3RtdCk7ICsraSkNCj4+PiANCj4+PiBpc24ndCB0aGF0IGZyb20g dGhlIHRpbWUgdGhlcmUgd2FzIGEgZGVjbCBhcmd1bWVudCB0byAuREVGRVJSRURfSU5JVD8NCj4+ IA0KPj4gWW91IG1lYW4gdGhpcyBpc3N1ZSBpcyBvbmx5IHRoZXJlIHdoZW4gdGhlIGRlY2wgaXMg dGhlIGZpcnN0IGFyZ3VtZW50ICh0aGUgb2xkIGRlc2lnbiBmb3IgLkRFRkVSUkVEX0lOSVQpLg0K Pj4gV2l0aCB0aGUgbmV3IGRlc2lnbiwgdGhpcyBpc3N1ZSBpcyBub3QgdGhlcmUgYW55bW9yZT8N Cj4gDQo+IEkgdGhpbmsgc28sIHllcyAtIHRoZSBjaGFuZ2Ugc2hvdWxkIG5vIGxvbmdlciBiZSBu ZWVkZWQuDQo+IA0KPiBSaWNhaHJkLg0KPiANCj4+PiANCj4+PiArICBpZiAoZ2ltcGxlX2NhbGxf aW50ZXJuYWxfcCAoc3RtdCwgSUZOX0RFRkVSUkVEX0lOSVQpKQ0KPj4+ICsgICAgew0KPj4+ICsg ICAgICB0cmVlIHNpemVfb2ZfYXJnMCA9IGdpbXBsZV9jYWxsX2FyZyAoc3RtdCwgMCk7DQo+Pj4g KyAgICAgIHRyZWUgc2l6ZV9vZl9saHMgPSBUWVBFX1NJWkVfVU5JVCAoVFJFRV9UWVBFIChsaHMp KTsNCj4+PiArICAgICAgdHJlZSBpc192bGFfbm9kZSA9IGdpbXBsZV9jYWxsX2FyZyAoc3RtdCwg Mik7DQo+Pj4gKyAgICAgIGJvb2wgaXNfdmxhID0gKGJvb2wpIFRSRUVfSU5UX0NTVF9MT1cgKGlz X3ZsYV9ub2RlKTsNCj4+PiArDQo+Pj4gKyAgICAgIGlmIChUUkVFX0NPREUgKGxocykgPT0gU1NB X05BTUUpDQo+Pj4gKyAgICAgICBsaHMgPSBTU0FfTkFNRV9WQVIgKGxocyk7DQo+Pj4gKw0KPj4+ IA0KPj4+ICdsaHMnIGlzIG5vdCBsb29rZWQgYXQgYWZ0ZXIgdGhpcywgbm8gbmVlZCB0byBsb29r IGF0IFNTQV9OQU1FX1ZBUi4NCj4+IA0KPj4gT2theSwgd2lsbCB1cGRhdGUgdGhpcy4NCj4+IA0K Pj4+IA0KPj4+IA0KPj4+IFRoYW5rcyBhbmQgc29ycnkgZm9yIHRoZSBkZWxheSBpbiByZXZpZXdp bmcgdGhpcyAoYWdhaW4pLg0KPj4gDQo+PiBUaGFua3MgYWdhaW4gZm9yIHlvdXIgZGV0YWlsZWQg cmV2aWV3IGFuZCBzdWdnZXN0aW9ucy4NCj4+IA0KPj4gSSB3aWxsIHVwZGF0ZSB0aGUgcGF0Y2gg YWNjb3JkaW5nbHkgYW5kIHNlbmQgdGhlIHVwZGF0ZWQgcGF0Y2ggc29vbi4NCj4+IA0KPj4gUWlu Zw0KPj4+IA0KPj4+IFJpY2hhcmQuDQo+Pj4gDQo+Pj4gDQo+Pj4+IFRoYW5rcw0KPj4+PiANCj4+ IA0KPj4gDQo+IA0KPiAtLSANCj4gUmljaGFyZCBCaWVuZXIgPHJndWVudGhlckBzdXNlLmRlPg0K PiBTVVNFIFNvZnR3YXJlIFNvbHV0aW9ucyBHZXJtYW55IEdtYkgsIE1heGZlbGRzdHJhc3NlIDUs IDkwNDA5IE51ZXJuYmVyZywNCj4gR2VybWFueTsgR0Y6IEZlbGl4IEltZW5kw7ZyZmZlcjsgSFJC IDM2ODA5IChBRyBOdWVybmJlcmcpDQoNCg==