From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 73B28C64EC7 for ; Sat, 25 Feb 2023 07:33:43 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229660AbjBYHdm (ORCPT ); Sat, 25 Feb 2023 02:33:42 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35754 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229656AbjBYHdj (ORCPT ); Sat, 25 Feb 2023 02:33:39 -0500 Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 92EFA1C58A; Fri, 24 Feb 2023 23:33:36 -0800 (PST) Received: from pps.filterd (m0246632.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 31P4I5tr023673; Sat, 25 Feb 2023 07:33:27 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : subject : date : message-id : references : in-reply-to : content-type : content-id : content-transfer-encoding : mime-version; s=corp-2022-7-12; bh=tBYTJnFbDcvpjcA90pWNg2bqKsYicsyUJPGhOQlTINI=; b=xC7xnOO68dsd08fda6bneqXvw05E5SPuILk4jxheDeN1xXK9RebCv+5DpPkbWMF5axdH uIM6H6viD7fHCEkjZGQtwbhFMP9kMhnZrczz+Sxti4szilf35LhpQ8A4gES/8lZ/FOpo ssZCsw1mwSWrSgWqQnbvPD1w4Nv0mfT8Po+bC+UDEUlS4O0TH7BZY3EwvXQfrmOMFsZv cTvAk/hQvTC10NeYCZa3Nh+feGfjeTm0xBkqZ1xuUPdDgEYCweZO+Ltwiw/TvQUY6ZoK afeX2WOAnea5PGr2n1pmLarBiheTfUeSF/eXW9ipb3xdw6hxEFn3Y65dXDVKpl4JffZj Ag== Received: from iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta02.appoci.oracle.com [147.154.18.20]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3nyb6e83ge-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Sat, 25 Feb 2023 07:33:27 +0000 Received: from pps.filterd (iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (8.17.1.5/8.17.1.5) with ESMTP id 31P60R74032510; Sat, 25 Feb 2023 07:33:26 GMT Received: from nam04-mw2-obe.outbound.protection.outlook.com (mail-mw2nam04lp2173.outbound.protection.outlook.com [104.47.73.173]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 3ny8s9pd9a-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Sat, 25 Feb 2023 07:33:26 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=BaycDdj0/A7FlK2oZL7wR7oenDohXvFWNteU4v7Oz6fj2uVwCLAdDUFFTG9SC8uLEDUOlN8IQrxrzgeMYcrukOL4LfylGO6CNAqpzYfhn1ya8L0YF7D14TPnkKhvz+p1ZGpBe17CWn4fVLu8jh+Rf2P9K1YL9FH/FLz5lSqeZ1YJXeAMl319c6r/M1nFgYZQLaBlYoJR1ML/Yddnr7Zpxbc9UDHJ6kyk45K0+V7eu6die7qWtEsZ0v/C2g24ZOp/E78bPwsfxoRj3YRhmk6LfBK5gPrtmVrgKXgvCYaSjkdiXrfVCfFepCKiAUNaS9u4XgBP5J7xEXdWypjIn5DzTQ== 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=tBYTJnFbDcvpjcA90pWNg2bqKsYicsyUJPGhOQlTINI=; b=JleA2FXeytjBCWRj62CdhGfXpJ2gex3qBWLU4UJM9Us+kRDyq6ulrVsdmV9N+1cVNErhdJqKh7ImBvS7sus+08+gl44+8EJiMFcOf9jVFn6XBgmKtnyGLxDxDbqFbswTawKIKRMz1g0LUPsoLUOCaPVL6bHS3Ihm+21I3fidUMIrUUuv1C739DWWw5YT7DERg3D3c8POjlKXofI6l/B0oUpaulVugL2Qu8nXtMsTnbac+2O0DaApSy77pH4EZwTlZBet6FLfwlu2H88ByrMG4gXuRn+wlXAu65xp30qh3T5nCjgOrpMVSH2DxRZ67ZzWlNwAXUQuVsEcuOVB+Qb2QQ== 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 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=tBYTJnFbDcvpjcA90pWNg2bqKsYicsyUJPGhOQlTINI=; b=Ogv3yhKoxFU/yt+GBcECm1xeL3d8nG3xPeMJ1AzFP56F312pr/cDms/pPGPSnzJWyyEJTZp8B5K5NXslmO/YrsqzIL0Hbna+qF5W7GLxsgXtnhs0d0p3VWuE4eeWuIBB3BVh6eFLfTCZxW2yG8au+y3pnTigiJGaUNuJBP14X2E= Received: from CH2PR10MB4312.namprd10.prod.outlook.com (2603:10b6:610:7b::9) by CO1PR10MB4738.namprd10.prod.outlook.com (2603:10b6:303:93::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6156.12; Sat, 25 Feb 2023 07:33:23 +0000 Received: from CH2PR10MB4312.namprd10.prod.outlook.com ([fe80::2b08:15c4:ba38:6b44]) by CH2PR10MB4312.namprd10.prod.outlook.com ([fe80::2b08:15c4:ba38:6b44%9]) with mapi id 15.20.6156.011; Sat, 25 Feb 2023 07:33:23 +0000 From: Allison Henderson To: "david@fromorbit.com" , "linux-fsdevel@vger.kernel.org" , "hch@infradead.org" , "djwong@kernel.org" , "linux-xfs@vger.kernel.org" , "willy@infradead.org" , Catherine Hoang , Chandan Babu Subject: Re: [PATCH v24.3 12/14] xfs: document directory tree repairs Thread-Topic: [PATCH v24.3 12/14] xfs: document directory tree repairs Thread-Index: AQHZN3T1TV5f3/vQZEubpPhDVlTcua7fZ/YA Date: Sat, 25 Feb 2023 07:33:23 +0000 Message-ID: <181f96f378c88281e9fa48e1803a03254051cb35.camel@oracle.com> References: <167243825144.682859.12802259329489258661.stgit@magnolia> <167243825331.682859.12874143420813343961.stgit@magnolia> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Evolution 3.44.4-0ubuntu1 x-ms-publictraffictype: Email x-ms-traffictypediagnostic: CH2PR10MB4312:EE_|CO1PR10MB4738:EE_ x-ms-office365-filtering-correlation-id: f1a6d93d-3ce2-4ab1-bb2b-08db17029395 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: RB+/AvnzcZ0YE0K5+UobOI1NTxY7JhIXMIb0jjG2yczFd57w0wyI0/kbOw8KCFzHPNlW+kjSCvIrpsed/1hsIe/nAXo5nsOE2GTPpbFfYeTGTpSdSo53EZh5S7c0il9SulOFJuGuc6mM8ZFtXOTYk4fUqPUlUh3EHzCvE3GKngQ92iC7V24OeG4wQ+YPCQUC4FnTA3fVcSddpS3biJAegC5tv/UH6/qxv/9eYCArSt2MXZrx4DgiSwtZUtn4nTC714M1SOAxFwvh7KEJe1QRvXfuGHB+FSkF5SOSGxTfdi0e2zWQWHx0XMx8JKGQ9qh5K0ViQCrRtrXTNVJ2YpmFWPR/1O9G/zva6nMjCmSCMMFKBmn03HXPShlOFYpmcYGNDJWIW7QvHf2nC5Of2umTOOpPk6GVI7P+pINXBDn3YI4c0FTiDCqHpt79/ts3PJudLr47m0NZ048usNElICjZaBDGdBZ3KqHqCzDIVvOAE6/zIr80kB1HgPMlBHi28QfyXji+RLRiC7hWsB9EIlQaLOlH0vOkyy8rx1VGtf7bQPxfWOIdk5YOVJe3jx287w5k6j7GV16Sn6VHmjy+905uugI4b7uhdooaSHPH5vpYZeXDXfhzYUC+pRWT9zqg+Kn4kpgKTfJnhU4jJgo5otLTcJdLli6aM294DWIiYR5VlpJj44z8HvcKS2+26e5wqXi5ItPPpe7IYJy8b45jutpXHdfn58yT7mU23YQ6FNCXjDY= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH2PR10MB4312.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230025)(136003)(346002)(376002)(396003)(39860400002)(366004)(451199018)(316002)(38070700005)(41300700001)(186003)(26005)(30864003)(8936002)(2616005)(44832011)(5660300002)(122000001)(966005)(6486002)(6512007)(6506007)(6636002)(110136005)(8676002)(64756008)(76116006)(91956017)(66446008)(66476007)(66556008)(66946007)(71200400001)(83380400001)(38100700002)(86362001)(478600001)(36756003)(2906002)(579004);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?bnUwczZsR2FRREVERjN1TVlMcVFRSTQ3a2lUM0dNRG1XclZHdGY0ejNVbGdN?= =?utf-8?B?SENwdnVha1l4SjRwaUxpd0xKMi9OOWlQNGlmQ3h2MzJBcHhHcThjZ3dVTmgw?= =?utf-8?B?YWFmdmpkMm1YZURpY1pkUTRVamp6MUwyYmhrcllMWDQra21nQnJoNkVnbUg3?= =?utf-8?B?UTNiRkh6dVpPUE9OS3l4ZEdtTnNPR2hDMVdDN2V0d2Q2YnVnZUFraVBRbndE?= =?utf-8?B?d2ZzME5YVUF5NEJBWjRxL1FNeS9lL2VaTXgxKy9GREVFeERYT1BTanl1R21s?= =?utf-8?B?L0h4b2FFK2dVR1BaS056QVVLTTM3MFNURXpLNHZXSFJkSnh6OFo0b01WN3Fu?= =?utf-8?B?NHk1RGhzMFpjRUh4amgrVUhpLzZWdW5rRDNtZmlyb2F0ZWM5WmcvVmx0aDBE?= =?utf-8?B?ZkRhWGxpUk44U3BPNGdRZUZMQ05jWmVOdmtqQkhuUCtvWUc5cW9ZbzdCS0lJ?= =?utf-8?B?WGV0VzJRRlIvZXdBU3Z3T0hxWDZrYkFHK3FLNG04K29XdkVabTBwaXJHdjBn?= =?utf-8?B?bHVtWnpxQmpDd3NaYloxenFVTUxFTFdiSXR2ZGNoN2lHemd0aForbDE4R1VD?= =?utf-8?B?KzcwTUJZZXh0ZG5VS1VJenkvUThocFoxSnRJZHZyR00zbW5LOHVrRUtJV2JU?= =?utf-8?B?djByV3RXUW9Pblc2VFkwdmVocXhZT0ExcC9aV01HVXBMcEhiWTBGQTJpZDZU?= =?utf-8?B?c21HeERWY2tzVFk0NkVzbkZCL1o0dkNaNk01Z05lMGsrVktid24vUVdYMlc3?= =?utf-8?B?TFpSWVFQV2tCV05jTVNnTmpIM2g1S0pBaGxnaTk1b094R3NLNGRYTTNEbDV4?= =?utf-8?B?elNKQWZKY3BvTnYwNmNwa2tzWCtFNjJSVExMMUtpYWF4eURtcmErN2F1M3cy?= =?utf-8?B?U0JqKzQwN2FxN2o3M3JSSmpuWTk5ZDBzRDFsN1NBN25NZWR0V0NBZWVMSnk1?= =?utf-8?B?cys2V3Z2KzBJWWZoWlF3MUh5Tk5iWXhpa2tCQ3FSaFlJcDU3WGgrS2xoOFl2?= =?utf-8?B?TFVsb2p2NWQ4aG4rbmUvR083dkRUMlNsRzlNU2tXaFYraEpWR3prOUJhS09v?= =?utf-8?B?UHdzclp4UEFoQzVzd0hYd2hzQUxQbjlCZTR6eHhXTVJmY1RERUZlYVdFTFZR?= =?utf-8?B?Y2xwbmdha0FnZitHYWdSOFlqU0lEMlZtWEdOYmY5RGtrZ25CeTFUNlFMek55?= =?utf-8?B?NDRtbDZMTU5taCs1bllyTnY2VDI5Zk5qc0w0Q3JvNC9mRzlBcGljY0xIWUFv?= =?utf-8?B?Ly8zQ0pQbkJ4VXFXWloydFZiZ3l5ajJBMjRxUm9EdWhtSVRyb2dHajc1R1VW?= =?utf-8?B?RjF3akRPU1BwR040LzNpdlloNTk0b0Nnemk3ekI2TFQxa3A2QjFXdGIxM1Fa?= =?utf-8?B?OHhnb2J3L0pwbnh6MFBLTVp5MEllODY2MlNQaStGMEx6SzExYS9BSkk0cCtw?= =?utf-8?B?YkRuNUs3Y3FvUWw1ekFoUXFhNXRkdUthdnlnRVBXNkpTbU5JM3ZoQjRGbWtI?= =?utf-8?B?K0VYMVhzNWR0U3d2YVFsdEtWd1FMMldjOWxnbVNkaHcvMUZOS09rem1TWXd4?= =?utf-8?B?TmlaZkptU0FRK2FRRTRlZEdHV0c0SllDeWlhZndpbnpZc0dDWXk2YnBaWTlM?= =?utf-8?B?UTZoLzRXSmZQMFkyN2VqUnBzb3hOZ3Z4MnM2UXExaVdTZVB6UEtOWmNMYUJi?= =?utf-8?B?MzdVNmxQVVZkczZIc0RGbnNvWVpSWmJGUGI5NDNFclViOTVONDJxWjVZUWN5?= =?utf-8?B?dkZDeHpyQmNEVStSKzVZMlh6eGlFRmNiL2NmS0xnZWFxWk1rdnJwc3djSlRX?= =?utf-8?B?alRwSmtYNkNIUFd6aDhLUHBqeEhCd2NXS0N4ZHh6Z1U2aWpLVyt4OTlmQlJu?= =?utf-8?B?UjlrODNxcjZpcnREVEZLbUxkNzhFZ3ZoanBjMm8vdlV5Q1hrSTBLZFMrYTBl?= =?utf-8?B?dk9PUEc2cURDSVZOTklpVkRSckcrTm82VVJZNkpqQXhqbGJDZGdhanFkeEIx?= =?utf-8?B?MTgxdEJ1N09YMjBKckVBcU83dzdwVWpaS3RudTQxR0hQaW9FN0R5U1VwVGhJ?= =?utf-8?B?c3FYcTFxMDhsdFlTaEYwaU9YazJJNjBmdThmRnhQRi9DMVBLQ0cyNmxhdk80?= =?utf-8?B?YU1KNmk2YUNnRXliWWVqRWdyc1pwRWtTQVg2d20zMHU4U2pZODFNV0tzMlhw?= =?utf-8?Q?B4JyeSTspmEhOFomBP4L/Zk=3D?= Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: wREBtZubKj8txzjGzd+JlgdEsOysNYfuyuQJMk7ILkvZhD/+g+BkXDaGKMWgoBLOfdlBhsjitI6yPUOEEgfI014lp5hziFnhe7GSfiypbwn+ciXKVlVXKBqZVzvQhL3trT6Ex6QFmjZCuXWTMWO2DsrcQL5G1Me9lUWF6kxZKHR0CY3RQdeL2uOwYlbC6Bdc8rGzU9RIGu7VSLtb000IHW/dqrD2EcS2k42CWk7rSjmzEf7Jf6GJQP1g5MzESJ6vVdIVZBet2+stkfKxeZANP13UmWOM+Uw1JG+hUbCdEB0J2Keyb3R+osAMg9qj5x6Sa5kNlMKHwTC4FVpWfes5p4mJTbI7HWY4clyMbL8nhFkRdrzrIpe3uHE5Q9iy7J65IEzswkn5w27WtnS4AAn0rwmGbwKk1kONLgO4j5wHGkJqKt/ij3pDJsycF3HajeLhfJiO36iDun55Ocxgeg2XMDXJcNvlSHlMOkfFuh16r9YecksEuGKnb996QuA6eeLLNv3inkUyncQXV7nx7plMvQp/Yg6l4+xMbG9Drsa5yrEQwhGpiz/9N28pPvHTi7wgPlLF7TYJSPqwJN27T8Aq1tiVCsWEUYFXW94DClL6JAPBcIQqDGhT6mdul0rtUsfi4YsAhfi+r1MDwTuEyBs45Bw42tGt8RGLRM7S8LGHhn42zj3C5LJsalAGfTU1vVaxIrN1KmrBjrRf/m2c2wCsyjQ2bvLjoi6AQZuV8IJIoeQ8Kofm+nom0dADFua2GyZAKRPRLIixErF0l+ztaNswzQf/hxS/QjeTTUmzDzpG1qdoiNjV0x2cuxpTys/hSFVszuw8EqwA0D2ZJn6GFL5iwfdsabiNZrDEvrmTwNX71f0= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CH2PR10MB4312.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: f1a6d93d-3ce2-4ab1-bb2b-08db17029395 X-MS-Exchange-CrossTenant-originalarrivaltime: 25 Feb 2023 07:33:23.6337 (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: wzXpg8UtA6qKf6TSbTAa0RT4S4pl3CDfzSHQrT6fyN1Kg+vNzzP+ydY3IdX0vaSKT7YehEqfebpdUeiNDg7Cf5+UfjheBRztXLEDk4IjY3Y= X-MS-Exchange-Transport-CrossTenantHeadersStamped: CO1PR10MB4738 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.219,Aquarius:18.0.930,Hydra:6.0.562,FMLib:17.11.170.22 definitions=2023-02-25_04,2023-02-24_01,2023-02-09_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 mlxlogscore=999 mlxscore=0 adultscore=0 bulkscore=0 malwarescore=0 phishscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2212070000 definitions=main-2302250059 X-Proofpoint-ORIG-GUID: i9tjiAZCSC8JaeWf2DBp4D7Aa8ydirQl X-Proofpoint-GUID: i9tjiAZCSC8JaeWf2DBp4D7Aa8ydirQl Precedence: bulk List-ID: X-Mailing-List: linux-fsdevel@vger.kernel.org T24gVGh1LCAyMDIzLTAyLTAyIGF0IDE4OjEyIC0wODAwLCBEYXJyaWNrIEouIFdvbmcgd3JvdGU6 DQo+IEZyb206IERhcnJpY2sgSi4gV29uZyA8ZGp3b25nQGtlcm5lbC5vcmc+DQo+IA0KPiBEaXJl Y3RvcnkgdHJlZSByZXBhaXJzIGFyZSB0aGUgbGVhc3QgY29tcGxldGUgcGFydCBvZiBvbmxpbmUg ZnNjaywNCj4gZHVlDQo+IHRvIHRoZSBsYWNrIG9mIGRpcmVjdG9yeSBwYXJlbnQgcG9pbnRlcnMu wqAgSG93ZXZlciwgZXZlbiB3aXRob3V0IHRoYXQNCj4gZmVhdHVyZSwgd2UgY2FuIHN0aWxsIG1h a2Ugc29tZSBjb3JyZWN0aW9ucyB0byB0aGUgZGlyZWN0b3J5IHRyZWUgLS0NCj4gd2UNCj4gY2Fu IHNhbHZhZ2UgYXMgbWFueSBkaXJlY3RvcnkgZW50cmllcyBhcyB3ZSBjYW4gZnJvbSBhIGRhbWFn ZWQNCj4gZGlyZWN0b3J5LCBhbmQgd2UgY2FuIHJlYXR0YWNoIG9ycGhhbmVkIGlub2RlcyB0byB0 aGUgbG9zdCtmb3VuZCwNCj4ganVzdA0KPiBhcyB4ZnNfcmVwYWlyIGRvZXMgbm93Lg0KPiANCj4g U2lnbmVkLW9mZi1ieTogRGFycmljayBKLiBXb25nIDxkandvbmdAa2VybmVsLm9yZz4NCj4gLS0t DQo+IHYyNC4yOiB1cGRhdGVkIHdpdGggbXkgbGF0ZXN0IHRob3VnaHRzIGFib3V0IGhvdyB0byB1 c2UgcGFyZW50DQo+IHBvaW50ZXJzDQo+IHYyNC4zOiB1cGRhdGVkIHRvIHJlZmxlY3QgdGhlIG9u bGluZSBmc2NrIGNvZGUgSSBidWlsdCBmb3IgcGFyZW50DQo+IHBvaW50ZXJzDQo+IC0tLQ0KPiDC oC4uLi9maWxlc3lzdGVtcy94ZnMtb25saW5lLWZzY2stZGVzaWduLnJzdMKgwqDCoMKgwqDCoMKg wqAgfMKgIDQxMA0KPiArKysrKysrKysrKysrKysrKysrKw0KPiDCoDEgZmlsZSBjaGFuZ2VkLCA0 MTAgaW5zZXJ0aW9ucygrKQ0KPiANCj4gZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5 c3RlbXMveGZzLW9ubGluZS1mc2NrLWRlc2lnbi5yc3QNCj4gYi9Eb2N1bWVudGF0aW9uL2ZpbGVz eXN0ZW1zL3hmcy1vbmxpbmUtZnNjay1kZXNpZ24ucnN0DQo+IGluZGV4IGFmNzc1NWZlMDEwNy4u NTFkMDQwZTRhMmQwIDEwMDY0NA0KPiAtLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3hm cy1vbmxpbmUtZnNjay1kZXNpZ24ucnN0DQo+ICsrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3Rl bXMveGZzLW9ubGluZS1mc2NrLWRlc2lnbi5yc3QNCj4gQEAgLTQzNTksMyArNDM1OSw0MTMgQEAg VGhlIHByb3Bvc2VkIHBhdGNoc2V0IGlzIHRoZQ0KPiDCoGBleHRlbmRlZCBhdHRyaWJ1dGUgcmVw YWlyDQo+IMKgPA0KPiBodHRwczovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVs L2dpdC9kandvbmcveGZzLWxpbnV4LmdpdC8NCj4gbG9nLz9oPXJlcGFpci14YXR0cnM+YF8NCj4g wqBzZXJpZXMuDQo+ICsNCj4gK0ZpeGluZyBEaXJlY3Rvcmllcw0KPiArLS0tLS0tLS0tLS0tLS0t LS0tDQo+ICsNCj4gK0ZpeGluZyBkaXJlY3RvcmllcyBpcyBkaWZmaWN1bHQgd2l0aCBjdXJyZW50 bHkgYXZhaWxhYmxlIGZpbGVzeXN0ZW0NCj4gZmVhdHVyZXMsDQo+ICtzaW5jZSBkaXJlY3Rvcnkg ZW50cmllcyBhcmUgbm90IHJlZHVuZGFudC4NCj4gK1RoZSBvZmZsaW5lIHJlcGFpciB0b29sIHNj YW5zIGFsbCBpbm9kZXMgdG8gZmluZCBmaWxlcyB3aXRoIG5vbnplcm8NCj4gbGluayBjb3VudCwN Cj4gK2FuZCB0aGVuIGl0IHNjYW5zIGFsbCBkaXJlY3RvcmllcyB0byBlc3RhYmxpc2ggcGFyZW50 YWdlIG9mIHRob3NlDQo+IGxpbmtlZCBmaWxlcy4NCj4gK0RhbWFnZWQgZmlsZXMgYW5kIGRpcmVj dG9yaWVzIGFyZSB6YXBwZWQsIGFuZCBmaWxlcyB3aXRoIG5vIHBhcmVudA0KPiBhcmUNCj4gK21v dmVkIHRvIHRoZSBgYC9sb3N0K2ZvdW5kYGAgZGlyZWN0b3J5Lg0KPiArSXQgZG9lcyBub3QgdHJ5 IHRvIHNhbHZhZ2UgYW55dGhpbmcuDQo+ICsNCj4gK1RoZSBiZXN0IHRoYXQgb25saW5lIHJlcGFp ciBjYW4gZG8gYXQgdGhpcyB0aW1lIGlzIHRvIHJlYWQgZGlyZWN0b3J5DQo+IGRhdGENCj4gK2Js b2NrcyBhbmQgc2FsdmFnZSBhbnkgZGlyZW50cyB0aGF0IGxvb2sgcGxhdXNpYmxlLCBjb3JyZWN0 IGxpbmsNCj4gY291bnRzLCBhbmQNCj4gK21vdmUgb3JwaGFucyBiYWNrIGludG8gdGhlIGRpcmVj dG9yeSB0cmVlLg0KPiArVGhlIHNhbHZhZ2UgcHJvY2VzcyBpcyBkaXNjdXNzZWQgaW4gdGhlIGNh c2Ugc3R1ZHkgYXQgdGhlIGVuZCBvZg0KPiB0aGlzIHNlY3Rpb24uDQo+ICtUaGUgOnJlZjpgZmls ZSBsaW5rIGNvdW50IGZzY2sgPG5saW5rcz5gIGNvZGUgdGFrZXMgY2FyZSBvZiBmaXhpbmcNCj4g bGluayBjb3VudHMNCj4gK2FuZCBtb3Zpbmcgb3JwaGFucyB0byB0aGUgYGAvbG9zdCtmb3VuZGBg IGRpcmVjdG9yeS4NCj4gKw0KPiArQ2FzZSBTdHVkeTogU2FsdmFnaW5nIERpcmVjdG9yaWVzDQo+ ICtgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGANCj4gKw0KPiArVW5saWtlIGV4dGVu ZGVkIGF0dHJpYnV0ZXMsIGRpcmVjdG9yeSBibG9ja3MgYXJlIGFsbCB0aGUgc2FtZSBzaXplLA0K PiBzbw0KPiArc2FsdmFnaW5nIGRpcmVjdG9yaWVzIGlzIHN0cmFpZ2h0Zm9yd2FyZDoNCj4gKw0K PiArMS4gRmluZCB0aGUgcGFyZW50IG9mIHRoZSBkaXJlY3RvcnkuDQo+ICvCoMKgIElmIHRoZSBk b3Rkb3QgZW50cnkgaXMgbm90IHVucmVhZGFibGUsIHRyeSB0byBjb25maXJtIHRoYXQgdGhlDQo+ IGFsbGVnZWQNCj4gK8KgwqAgcGFyZW50IGhhcyBhIGNoaWxkIGVudHJ5IHBvaW50aW5nIGJhY2sg dG8gdGhlIGRpcmVjdG9yeSBiZWluZw0KPiByZXBhaXJlZC4NCj4gK8KgwqAgT3RoZXJ3aXNlLCB3 YWxrIHRoZSBmaWxlc3lzdGVtIHRvIGZpbmQgaXQuDQo+ICsNCj4gKzIuIFdhbGsgdGhlIGZpcnN0 IHBhcnRpdGlvbiBvZiBkYXRhIGZvcmsgb2YgdGhlIGRpcmVjdG9yeSB0byBmaW5kDQo+IHRoZSBk aXJlY3RvcnkNCj4gK8KgwqAgZW50cnkgZGF0YSBibG9ja3MuDQo+ICvCoMKgIFdoZW4gb25lIGlz IGZvdW5kLA0KPiArDQo+ICvCoMKgIGEuIFdhbGsgdGhlIGRpcmVjdG9yeSBkYXRhIGJsb2NrIHRv IGZpbmQgY2FuZGlkYXRlIGVudHJpZXMuDQo+ICvCoMKgwqDCoMKgIFdoZW4gYW4gZW50cnkgaXMg Zm91bmQ6DQo+ICsNCj4gK8KgwqDCoMKgwqAgaS4gQ2hlY2sgdGhlIG5hbWUgZm9yIHByb2JsZW1z LCBhbmQgaWdub3JlIHRoZSBuYW1lIGlmIHRoZXJlDQo+IGFyZS4NCj4gKw0KPiArwqDCoMKgwqDC oCBpaS4gUmV0cmlldmUgdGhlIGludW1iZXIgYW5kIGdyYWIgdGhlIGlub2RlLg0KPiArwqDCoMKg wqDCoMKgwqDCoMKgIElmIHRoYXQgc3VjY2VlZHMsIGFkZCB0aGUgbmFtZSwgaW5vZGUgbnVtYmVy LCBhbmQgZmlsZQ0KPiB0eXBlIHRvIHRoZQ0KPiArwqDCoMKgwqDCoMKgwqDCoMKgIHN0YWdpbmcg eGZhcnJheSBhbmQgeGJsb2IuDQo+ICsNCj4gKzMuIElmIHRoZSBtZW1vcnkgdXNhZ2Ugb2YgdGhl IHhmYXJyYXkgYW5kIHhmYmxvYiBleGNlZWQgYSBjZXJ0YWluDQo+IGFtb3VudCBvZg0KPiArwqDC oCBtZW1vcnkgb3IgdGhlcmUgYXJlIG5vIG1vcmUgZGlyZWN0b3J5IGRhdGEgYmxvY2tzIHRvIGV4 YW1pbmUsDQo+IHVubG9jayB0aGUNCj4gK8KgwqAgZGlyZWN0b3J5IGFuZCBhZGQgdGhlIHN0YWdl ZCBkaXJlbnRzIGludG8gdGhlIHRlbXBvcmFyeQ0KPiBkaXJlY3RvcnkuDQo+ICvCoMKgIFRydW5j YXRlIHRoZSBzdGFnaW5nIGZpbGVzLg0KPiArDQo+ICs0LiBVc2UgYXRvbWljIGV4dGVudCBzd2Fw cGluZyB0byBleGNoYW5nZSB0aGUgbmV3IGFuZCBvbGQgZGlyZWN0b3J5DQo+IHN0cnVjdHVyZXMu DQo+ICvCoMKgIFRoZSBvbGQgZGlyZWN0b3J5IGJsb2NrcyBhcmUgbm93IGF0dGFjaGVkIHRvIHRo ZSB0ZW1wb3JhcnkgZmlsZS4NCj4gKw0KPiArNS4gUmVhcCB0aGUgdGVtcG9yYXJ5IGZpbGUuDQo+ ICsNCg0KDQoNCj4gKyoqRnV0dXJlIFdvcmsgUXVlc3Rpb24qKjogU2hvdWxkIHJlcGFpciByZXZh bGlkYXRlIHRoZSBkZW50cnkgY2FjaGUNCj4gd2hlbg0KPiArcmVidWlsZGluZyBhIGRpcmVjdG9y eT8NCj4gKw0KPiArKkFuc3dlcio6IFllcywgdGhvdWdoIHRoZSBjdXJyZW50IGRlbnRyeSBjYWNo ZSBjb2RlIGRvZXNuJ3QgcHJvdmlkZQ0KPiBhIG1lYW5zDQo+ICt0byB3YWxrIGV2ZXJ5IGRlbnRy eSBvZiBhIHNwZWNpZmljIGRpcmVjdG9yeS4NCj4gK0lmIHRoZSBjYWNoZSBjb250YWlucyBhbiBl bnRyeSB0aGF0IHRoZSBzYWx2YWdpbmcgY29kZSBkb2VzIG5vdA0KPiBmaW5kLCB0aGUNCj4gK3Jl cGFpciBjYW5ub3QgcHJvY2VlZC4NCj4gKw0KPiArKipGdXR1cmUgV29yayBRdWVzdGlvbioqOiBD YW4gdGhlIGRlbnRyeSBjYWNoZSBrbm93IGFib3V0IGENCj4gZGlyZWN0b3J5IGVudHJ5DQo+ICt0 aGF0IGNhbm5vdCBiZSBzYWx2YWdlZD8NCj4gKw0KPiArKkFuc3dlcio6IEluIHRoZW9yeSwgdGhl IGRlbnRyeSBjYWNoZSBzaG91bGQgYmUgYSBzdWJzZXQgb2YgdGhlDQo+IGRpcmVjdG9yeQ0KPiAr ZW50cmllcyBvbiBkaXNrIGJlY2F1c2UgdGhlcmUncyBubyB3YXkgdG8gbG9hZCBhIGRlbnRyeSB3 aXRob3V0DQo+IGhhdmluZw0KPiArc29tZXRoaW5nIHRvIHJlYWQgaW4gdGhlIGRpcmVjdG9yeS4N Cj4gK0hvd2V2ZXIsIGl0IGlzIHBvc3NpYmxlIGZvciBhIGNvaGVyZW5jeSBwcm9ibGVtIHRvIGJl IGludHJvZHVjZWQgaWYNCj4gdGhlIG9uZGlzaw0KPiArc3RydWN0dXJlcyBiZWNvbWVzIGNvcnJ1 cHQgKmFmdGVyKiB0aGUgY2FjaGUgbG9hZHMuDQo+ICtJbiB0aGVvcnkgaXQgaXMgbmVjZXNzYXJ5 IHRvIHNjYW4gYWxsIGRlbnRyeSBjYWNoZSBlbnRyaWVzIGZvciBhDQo+IGRpcmVjdG9yeSB0bw0K PiArZW5zdXJlIHRoYXQgb25lIG9mIHRoZSBmb2xsb3dpbmcgYXBwbHk6DQoNCiJDdXJyZW50bHkg dGhlIGRlbnRyeSBjYWNoZSBjb2RlIGRvZXNuJ3QgcHJvdmlkZSBhIG1lYW5zIHRvIHdhbGsgZXZl cnkNCmRlbnRyeSBvZiBhIHNwZWNpZmljIGRpcmVjdG9yeS4gIFRoaXMgbWFrZXMgdmFsaWRhdGlv biBvZiB0aGUgcmVidWlsdA0KZGlyZWN0b3J5IGRpZmZpY3VsdCwgYW5kIGl0IGlzIHBvc3NpYmxl IHRoYXQgYW4gb25kaXNrIHN0cnVjdHVyZSB0bw0KYmVjb21lIGNvcnJ1cHQgKmFmdGVyKiB0aGUg Y2FjaGUgbG9hZHMuICBXYWxraW5nIHRoZSBkZW50cnkgY2FjaGUgaXMNCmN1cnJlbnRseSBiZWlu ZyBjb25zaWRlcmVkIGFzIGEgZnV0dXJlIGltcHJvdmVtZW50LiAgVGhpcyB3aWxsIGFsc28NCmVu YWJsZSB0aGUgYWJpbGl0eSB0byByZXBvcnQgd2hpY2ggZW50cmllcyB3ZXJlIG5vdCBzYWx2YWdl YWJsZSBzaW5jZQ0KdGhlc2Ugd2lsbCBiZSB0aGUgc3Vic2V0IG9mIGVudHJpZXMgdGhhdCBhcmUg YWJzZW50IGFmdGVyIHRoZSB3YWxrLiANClRoaXMgaW1wcm92ZW1lbnQgd2lsbCBlbnN1cmUgdGhh dCBvbmUgb2YgdGhlIGZvbGxvd2luZyBhcHBseToiDQoNCj8NCg0KSSBqdXN0IHRoaW5rIGl0IHJl YWRzIGNsZWFuZXIuICBJIHJlYWxpemUgdGhpcyBpcyBhbiBhcmVhIHRoYXQgc3RpbGwNCnNvcnQg b2YgaW4gZmx1eCwgYnV0IGRlZmluaXRlbHkgYmVmb3JlIHdlIGNhbGwgdGhlIGRvY3VtZW50IGRv bmUgd2UNCnNob3VsZCBwcm9iYWJseSBzdHJpcCBvdXQgdGhlIFEncyBhbmQganVzdCBkb2N1bWVu dCB0aGUgQSdzLiAgSWYNCnNvbWVvbmUgcmUtcmFpc2VzIHRoZSBRJ3Mgd2UgY2FuIGFsd2F5cyBy ZWZlciB0byB0aGUgYXJjaGl2ZXMgYW5kIHRoZW4NCmhhdmUgdGhlIGRpc2N1c3Npb24gb24gdGhl IG1haWxpbmcgbGlzdC4gIEJ1dCBJIHRoaW5rIHRoZSBkb2N1bWVudA0Kc2hvdWxkIG1haW50YWlu IHRoZSBnb2FsIG9mIG1ha2luZyBjbGVhciB3aGF0ZXZlciB0aGUgY3VycmVudCBwbGFuIGlzDQpq dXN0IHRvIGtlZXAgaXQgcmVhZGluZyBjbGVhbmx5LiANCg0KDQo+ICsNCj4gKzEuIFRoZSBjYWNo ZWQgZGVudHJ5IHJlZmxlY3RzIGFuIG9uZGlzayBkaXJlbnQgaW4gdGhlIG5ldyBkaXJlY3Rvcnku DQo+ICsNCj4gKzIuIFRoZSBjYWNoZWQgZGVudHJ5IG5vIGxvbmdlciBoYXMgYSBjb3JyZXNwb25k aW5nIG9uZGlzayBkaXJlbnQgaW4NCj4gdGhlIG5ldw0KPiArwqDCoCBkaXJlY3RvcnkgYW5kIHRo ZSBkZW50cnkgY2FuIGJlIHB1cmdlZCBmcm9tIHRoZSBjYWNoZS4NCj4gKw0KPiArMy4gVGhlIGNh Y2hlZCBkZW50cnkgbm8gbG9uZ2VyIGhhcyBhbiBvbmRpc2sgZGlyZW50IGJ1dCB0aGUgZGVudHJ5 DQo+IGNhbm5vdCBiZQ0KPiArwqDCoCBwdXJnZWQuDQoNCj4gK8KgwqAgVGhpcyBpcyBiYWQuDQpU aGVzZSBlbnRyaWVzIGFyZSBpcnJlY292ZXJhYmxlLCBidXQgY2FuIG5vdyBiZSByZXBvcnRlZC4N Cg0KDQoNCj4gKw0KPiArQXMgbWVudGlvbmVkIGFib3ZlLCB0aGUgZGVudHJ5IGNhY2hlIGRvZXMg bm90IGhhdmUgYSBtZWFucyB0byB3YWxrDQo+IGFsbCB0aGUNCj4gK2RlbnRyaWVzIHdpdGggYSBw YXJ0aWN1bGFyIGRpcmVjdG9yeSBhcyBhIHBhcmVudC4NCj4gK1RoaXMgbWFrZXMgZGV0ZWN0aW5n IHNpdHVhdGlvbnMgIzIgYW5kICMzIGltcG9zc2libGUsIGFuZCByZW1haW5zIGFuDQo+ICtpbnRl cmVzdGluZyBxdWVzdGlvbiBmb3IgcmVzZWFyY2guDQpJIHRoaW5rIHRoZSBhYm92ZSBwYXJhcGhy YXNlIG1ha2VzIHRoaXMgbGFzdCBiaXQgcmVkdW5kYW50Lg0KDQo+ICsNCj4gK1RoZSBwcm9wb3Nl ZCBwYXRjaHNldCBpcyB0aGUNCj4gK2BkaXJlY3RvcnkgcmVwYWlyDQo+ICs8DQo+IGh0dHBzOi8v Z2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2Rqd29uZy94ZnMtbGludXgu Z2l0Lw0KPiBsb2cvP2g9cmVwYWlyLWRpcnM+YF8NCj4gK3Nlcmllcy4NCj4gKw0KPiArUGFyZW50 IFBvaW50ZXJzDQo+ICtgYGBgYGBgYGBgYGBgYGANCj4gKw0KIkdlbmVyYWxseSBzcGVha2luZywg YSBwYXJlbnQgcG9pbnRlciBpcyBhbnkga2luZCBvZiBtZXRhZGF0YSB0aGF0DQplbmFibGVzIGFu IGlub2RlIHRvIGxvY2F0ZSBpdHMgcGFyZW50IHdpdGggb3V0IGhhdmluZyB0byB0cmF2ZXJzZSB0 aGUNCmRpcmVjdG9yeSB0cmVlIGZyb20gdGhlIHJvb3QuIg0KDQo+ICtUaGUgbGFjayBvZiBzZWNv bmRhcnkgZGlyZWN0b3J5IG1ldGFkYXRhIGhpbmRlcnMgZGlyZWN0b3J5IHRyZWUNCiJXaXRob3V0 IHRoZW0sIHRoZSBsYWNrIG9mIHNlY29uZGFyeS4uLiIgDQoNCj4gcmVjb25zdHJ1Y3Rpb24NCj4g K2luIG11Y2ggdGhlIHNhbWUgd2F5IHRoYXQgdGhlIGhpc3RvcmljIGxhY2sgb2YgcmV2ZXJzZSBz cGFjZSBtYXBwaW5nDQo+ICtpbmZvcm1hdGlvbiBvbmNlIGhpbmRlcmVkIHJlY29uc3RydWN0aW9u IG9mIGZpbGVzeXN0ZW0gc3BhY2UNCj4gbWV0YWRhdGEuDQo+ICtUaGUgcGFyZW50IHBvaW50ZXIg ZmVhdHVyZSwgaG93ZXZlciwgbWFrZXMgdG90YWwgZGlyZWN0b3J5DQo+IHJlY29uc3RydWN0aW9u DQo+ICtwb3NzaWJsZS4NCj4gKw0KDQpIaXN0b3J5IHNpZGUgYmFyIHRoZSBiZWxvdyBjaHVuay4u Lg0KPiArRGlyZWN0b3J5IHBhcmVudCBwb2ludGVycyB3ZXJlIGZpcnN0IHByb3Bvc2VkIGFzIGFu IFhGUyBmZWF0dXJlIG1vcmUNCj4gdGhhbiBhDQo+ICtkZWNhZGUgYWdvIGJ5IFNHSS4NCj4gK0Vh Y2ggbGluayBmcm9tIGEgcGFyZW50IGRpcmVjdG9yeSB0byBhIGNoaWxkIGZpbGUgaXMgbWlycm9y ZWQgd2l0aA0KPiBhbiBleHRlbmRlZA0KPiArYXR0cmlidXRlIGluIHRoZSBjaGlsZCB0aGF0IGNv dWxkIGJlIHVzZWQgdG8gaWRlbnRpZnkgdGhlIHBhcmVudA0KPiBkaXJlY3RvcnkuDQo+ICtVbmZv cnR1bmF0ZWx5LCB0aGlzIGVhcmx5IGltcGxlbWVudGF0aW9uIGhhZCBtYWpvciBzaG9ydGNvbWlu Z3MgYW5kDQo+IHdhcyBuZXZlcg0KPiArbWVyZ2VkIGludG8gTGludXggWEZTOg0KPiArDQo+ICsx LiBUaGUgWEZTIGNvZGViYXNlIG9mIHRoZSBsYXRlIDIwMDBzIGRpZCBub3QgaGF2ZSB0aGUNCj4g aW5mcmFzdHJ1Y3R1cmUgdG8NCj4gK8KgwqAgZW5mb3JjZSBzdHJvbmcgcmVmZXJlbnRpYWwgaW50 ZWdyaXR5IGluIHRoZSBkaXJlY3RvcnkgdHJlZS4NCj4gK8KgwqAgSXQgZGlkIG5vdCBndWFyYW50 ZWUgdGhhdCBhIGNoYW5nZSBpbiBhIGZvcndhcmQgbGluayB3b3VsZCBhbHdheXMNCj4gYmUNCj4g K8KgwqAgZm9sbG93ZWQgdXAgd2l0aCB0aGUgY29ycmVzcG9uZGluZyBjaGFuZ2UgdG8gdGhlIHJl dmVyc2UgbGlua3MuDQo+ICsNCj4gKzIuIFJlZmVyZW50aWFsIGludGVncml0eSB3YXMgbm90IGlu dGVncmF0ZWQgaW50byBvZmZsaW5lIHJlcGFpci4NCj4gK8KgwqAgQ2hlY2tpbmcgYW5kIHJlcGFp cnMgd2VyZSBwZXJmb3JtZWQgb24gbW91bnRlZCBmaWxlc3lzdGVtcw0KPiB3aXRob3V0IHRha2lu Zw0KPiArwqDCoCBhbnkga2VybmVsIG9yIGlub2RlIGxvY2tzIHRvIGNvb3JkaW5hdGUgYWNjZXNz Lg0KPiArwqDCoCBJdCBpcyBub3QgY2xlYXIgaG93IHRoaXMgYWN0dWFsbHkgd29ya2VkIHByb3Bl cmx5Lg0KPiArDQo+ICszLiBUaGUgZXh0ZW5kZWQgYXR0cmlidXRlIGRpZCBub3QgcmVjb3JkIHRo ZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkNCj4gZW50cnkgaW4gdGhlDQo+ICvCoMKgIHBhcmVudCwg c28gdGhlIFNHSSBwYXJlbnQgcG9pbnRlciBpbXBsZW1lbnRhdGlvbiBjYW5ub3QgYmUgdXNlZA0K PiB0byByZWNvbm5lY3QNCj4gK8KgwqAgdGhlIGRpcmVjdG9yeSB0cmVlLg0KPiArDQo+ICs0LiBF eHRlbmRlZCBhdHRyaWJ1dGUgZm9ya3Mgb25seSBzdXBwb3J0IDY1LDUzNiBleHRlbnRzLCB3aGlj aCBtZWFucw0KPiB0aGF0DQo+ICvCoMKgIHBhcmVudCBwb2ludGVyIGF0dHJpYnV0ZSBjcmVhdGlv biBpcyBsaWtlbHkgdG8gZmFpbCBhdCBzb21lIHBvaW50DQo+IGJlZm9yZSB0aGUNCj4gK8KgwqAg bWF4aW11bSBmaWxlIGxpbmsgY291bnQgaXMgYWNoaWV2ZWQuDQoNCg0KIlRoZSBvcmlnaW5hbCBw YXJlbnQgcG9pbnRlciBkZXNpZ24gd2FzIHRvbyB1bnN0YWJsZSBmb3Igc29tZXRoaW5nIGxpa2UN CmEgZmlsZSBzeXN0ZW0gcmVwYWlyIHRvIGRlcGVuZCBvbi4iDQoNCj4gKw0KPiArQWxsaXNvbiBI ZW5kZXJzb24sIENoYW5kYW4gQmFidSwgYW5kIENhdGhlcmluZSBIb2FuZyBhcmUgd29ya2luZyBv bg0KPiBhIHNlY29uZA0KPiAraW1wbGVtZW50YXRpb24gdGhhdCBzb2x2ZXMgYWxsIHNob3J0Y29t aW5ncyBvZiB0aGUgZmlyc3QuDQo+ICtEdXJpbmcgMjAyMiwgQWxsaXNvbiBpbnRyb2R1Y2VkIGxv ZyBpbnRlbnQgaXRlbXMgdG8gdHJhY2sgcGh5c2ljYWwNCj4gK21hbmlwdWxhdGlvbnMgb2YgdGhl IGV4dGVuZGVkIGF0dHJpYnV0ZSBzdHJ1Y3R1cmVzLg0KPiArVGhpcyBzb2x2ZXMgdGhlIHJlZmVy ZW50aWFsIGludGVncml0eSBwcm9ibGVtIGJ5IG1ha2luZyBpdCBwb3NzaWJsZQ0KPiB0byBjb21t aXQNCj4gK2EgZGlyZW50IHVwZGF0ZSBhbmQgYSBwYXJlbnQgcG9pbnRlciB1cGRhdGUgaW4gdGhl IHNhbWUgdHJhbnNhY3Rpb24uDQo+ICtDaGFuZGFuIGluY3JlYXNlZCB0aGUgbWF4aW11bSBleHRl bnQgY291bnRzIG9mIGJvdGggZGF0YSBhbmQNCj4gYXR0cmlidXRlIGZvcmtzLA0KDQo+ICt0aGVy ZWJ5IGFkZHJlc3NpbmcgdGhlIGZvdXJ0aCBwcm9ibGVtLg0Kd2hpY2ggZW5zdXJlcyB0aGUgcGFy ZW50IHBvaW50ZXIgY3JlYXRpb24gd2lsbCBzdWNjZWVkIGV2ZW4gaWYgdGhlIG1heA0KZXh0ZW50 IGNvdW50IGlzIHJlYWNoZWQuDQoNCj4gKw0KPiArVG8gc29sdmUgdGhlIHRoaXJkIHByb2JsZW0s IHBhcmVudCBwb2ludGVycyBpbmNsdWRlIHRoZSBkaXJlbnQgbmFtZQ0KIkxhc3RseSwgdGhlIG5l dyBkZXNpZ24gaW5jbHVkZXMgdGhlIGRpcmVudCBuYW1lLi4uIg0KDQo+IGFuZA0KPiArbG9jYXRp b24gb2YgdGhlIGVudHJ5IHdpdGhpbiB0aGUgcGFyZW50IGRpcmVjdG9yeS4NCj4gK0luIG90aGVy IHdvcmRzLCBjaGlsZCBmaWxlcyB1c2UgZXh0ZW5kZWQgYXR0cmlidXRlcyB0byBzdG9yZQ0KPiBw b2ludGVycyB0bw0KPiArcGFyZW50cyBpbiB0aGUgZm9ybSBgYChwYXJlbnRfaW51bSwgcGFyZW50 X2dlbiwgZGlyZW50X3Bvcykg4oaSDQo+IChkaXJlbnRfbmFtZSlgYC4NClRoaXMgcGFydHMgc3Rp bGwgaW4gZmx1eCwgc28gcHJvYmFibHkgdGhpcyB3aWxsIGhhdmUgdG8gZ2V0IHVwZGF0ZWQNCmxh dGVyLi4uDQoNCj4gKw0KPiArT24gYSBmaWxlc3lzdGVtIHdpdGggcGFyZW50IHBvaW50ZXJzLCB0 aGUgZGlyZWN0b3J5IGNoZWNraW5nIHByb2Nlc3MNCj4gY2FuIGJlDQo+ICtzdHJlbmd0aGVuZWQg dG8gZW5zdXJlIHRoYXQgdGhlIHRhcmdldCBvZiBlYWNoIGRpcmVudCBhbHNvIGNvbnRhaW5zDQo+ IGEgcGFyZW50DQo+ICtwb2ludGVyIHBvaW50aW5nIGJhY2sgdG8gdGhlIGRpcmVudC4NCj4gK0xp a2V3aXNlLCBlYWNoIHBhcmVudCBwb2ludGVyIGNhbiBiZSBjaGVja2VkIGJ5IGVuc3VyaW5nIHRo YXQgdGhlDQo+IHRhcmdldCBvZg0KPiArZWFjaCBwYXJlbnQgcG9pbnRlciBpcyBhIGRpcmVjdG9y eSBhbmQgdGhhdCBpdCBjb250YWlucyBhIGRpcmVudA0KPiBtYXRjaGluZw0KPiArdGhlIHBhcmVu dCBwb2ludGVyLg0KPiArQm90aCBvbmxpbmUgYW5kIG9mZmxpbmUgcmVwYWlyIGNhbiB1c2UgdGhp cyBzdHJhdGVneS4NCj4gKw0KPiArQ2FzZSBTdHVkeTogUmVwYWlyaW5nIERpcmVjdG9yaWVzIHdp dGggUGFyZW50IFBvaW50ZXJzDQo+ICteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5e Xl5eXl5eXl5eXl5eXl5eXl5eXl4NCj4gKw0KPiArRGlyZWN0b3J5IHJlYnVpbGRpbmcgdXNlcyBh IDpyZWY6YGNvb3JkaW5hdGVkIGlub2RlIHNjYW4gPGlzY2FuPmANCj4gYW5kDQo+ICthIDpyZWY6 YGRpcmVjdG9yeSBlbnRyeSBsaXZlIHVwZGF0ZSBob29rIDxsaXZldXBkYXRlPmAgYXMgZm9sbG93 czoNCj4gKw0KPiArMS4gU2V0IHVwIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSBmb3IgZ2VuZXJhdGlu ZyB0aGUgbmV3IGRpcmVjdG9yeQ0KPiBzdHJ1Y3R1cmUsDQo+ICvCoMKgIGFuIHhmYmxvYiBmb3Ig c3RvcmluZyBlbnRyeSBuYW1lcywgYW5kIGFuIHhmYXJyYXkgZm9yIHN0YXNoaW5nDQo+IGRpcmVj dG9yeQ0KPiArwqDCoCB1cGRhdGVzLg0KPiArDQo+ICsyLiBTZXQgdXAgYW4gaW5vZGUgc2Nhbm5l ciBhbmQgaG9vayBpbnRvIHRoZSBkaXJlY3RvcnkgZW50cnkgY29kZSB0bw0KPiByZWNlaXZlDQo+ ICvCoMKgIHVwZGF0ZXMgb24gZGlyZWN0b3J5IG9wZXJhdGlvbnMuDQo+ICsNCj4gKzMuIEZvciBl YWNoIHBhcmVudCBwb2ludGVyIGZvdW5kIGluIGVhY2ggZmlsZSBzY2FubmVkLCBkZWNpZGUgaWYg dGhlDQo+IHBhcmVudA0KPiArwqDCoCBwb2ludGVyIHJlZmVyZW5jZXMgdGhlIGRpcmVjdG9yeSBv ZiBpbnRlcmVzdC4NCj4gK8KgwqAgSWYgc286DQo+ICsNCj4gK8KgwqAgYS4gU3Rhc2ggYW4gYWRk bmFtZSBlbnRyeSBmb3IgdGhpcyBkaXJlbnQgaW4gdGhlIHhmYXJyYXkgZm9yDQo+IGxhdGVyLg0K PiArDQo+ICvCoMKgIGIuIFdoZW4gZmluaXNoZWQgc2Nhbm5pbmcgdGhhdCBmaWxlLCBmbHVzaCB0 aGUgc3Rhc2hlZCB1cGRhdGVzIHRvDQo+IHRoZQ0KPiArwqDCoMKgwqDCoCB0ZW1wb3JhcnkgZGly ZWN0b3J5Lg0KPiArDQo+ICs0LiBGb3IgZWFjaCBsaXZlIGRpcmVjdG9yeSB1cGRhdGUgcmVjZWl2 ZWQgdmlhIHRoZSBob29rLCBkZWNpZGUgaWYNCj4gdGhlIGNoaWxkDQo+ICvCoMKgIGhhcyBhbHJl YWR5IGJlZW4gc2Nhbm5lZC4NCj4gK8KgwqAgSWYgc286DQo+ICsNCj4gK8KgwqAgYS4gU3Rhc2gg YW4gYWRkbmFtZSBvciByZW1vdmVuYW1lIGVudHJ5IGZvciB0aGlzIGRpcmVudCB1cGRhdGUgaW4N Cj4gdGhlDQo+ICvCoMKgwqDCoMKgIHhmYXJyYXkgZm9yIGxhdGVyLg0KPiArwqDCoMKgwqDCoCBX ZSBjYW5ub3Qgd3JpdGUgZGlyZWN0bHkgdG8gdGhlIHRlbXBvcmFyeSBkaXJlY3RvcnkgYmVjYXVz ZQ0KPiBob29rDQo+ICvCoMKgwqDCoMKgIGZ1bmN0aW9ucyBhcmUgbm90IGFsbG93ZWQgdG8gbW9k aWZ5IGZpbGVzeXN0ZW0gbWV0YWRhdGEuDQo+ICvCoMKgwqDCoMKgIEluc3RlYWQsIHdlIHN0YXNo IHVwZGF0ZXMgaW4gdGhlIHhmYXJyYXkgYW5kIHJlbHkgb24gdGhlDQo+IHNjYW5uZXIgdGhyZWFk DQo+ICvCoMKgwqDCoMKgIHRvIGFwcGx5IHRoZSBzdGFzaGVkIHVwZGF0ZXMgdG8gdGhlIHRlbXBv cmFyeSBkaXJlY3RvcnkuDQo+ICsNCj4gKzUuIFdoZW4gdGhlIHNjYW4gaXMgY29tcGxldGUsIGF0 b21pY2FsbHkgc3dhcCB0aGUgY29udGVudHMgb2YgdGhlDQo+IHRlbXBvcmFyeQ0KPiArwqDCoCBk aXJlY3RvcnkgYW5kIHRoZSBkaXJlY3RvcnkgYmVpbmcgcmVwYWlyZWQuDQo+ICvCoMKgIFRoZSB0 ZW1wb3JhcnkgZGlyZWN0b3J5IG5vdyBjb250YWlucyB0aGUgZGFtYWdlZCBkaXJlY3RvcnkNCj4g c3RydWN0dXJlLg0KPiArDQo+ICs2LiBSZWFwIHRoZSB0ZW1wb3JhcnkgZGlyZWN0b3J5Lg0KPiAr DQo+ICs3LiBVcGRhdGUgdGhlIGRpcmVudCBwb3NpdGlvbiBmaWVsZCBvZiBwYXJlbnQgcG9pbnRl cnMgYXMgbmVjZXNzYXJ5Lg0KPiArwqDCoCBUaGlzIG1heSByZXF1aXJlIHRoZSBxdWV1aW5nIG9m IGEgc3Vic3RhbnRpYWwgbnVtYmVyIG9mIHhhdHRyIGxvZw0KPiBpbnRlbnQNCj4gK8KgwqAgaXRl bXMuDQo+ICsNCj4gK1RoZSBwcm9wb3NlZCBwYXRjaHNldCBpcyB0aGUNCj4gK2BwYXJlbnQgcG9p bnRlcnMgZGlyZWN0b3J5IHJlcGFpcg0KPiArPA0KPiBodHRwczovL2dpdC5rZXJuZWwub3JnL3B1 Yi9zY20vbGludXgva2VybmVsL2dpdC9kandvbmcveGZzLWxpbnV4LmdpdC8NCj4gbG9nLz9oPXBw dHJzLW9ubGluZS1kaXItcmVwYWlyPmBfDQo+ICtzZXJpZXMuDQo+ICsNCj4gKyoqVW5yZXNvbHZl ZCBRdWVzdGlvbioqOiBIb3cgd2lsbCByZXBhaXIgZW5zdXJlIHRoYXQgdGhlDQo+IGBgZGlyZW50 X3Bvc2BgIGZpZWxkcw0KPiArbWF0Y2ggaW4gdGhlIHJlY29uc3RydWN0ZWQgZGlyZWN0b3J5Pw0K PiArDQo+ICsqQW5zd2VyKjogVGhlcmUgYXJlIGEgZmV3IHdheXMgdG8gc29sdmUgdGhpcyBwcm9i bGVtOg0KPiArDQo+ICsxLiBUaGUgZmllbGQgY291bGQgYmUgZGVzaWduYXRlZCBhZHZpc29yeSwg c2luY2UgdGhlIG90aGVyIHRocmVlDQo+IHZhbHVlcyBhcmUNCj4gK8KgwqAgc3VmZmljaWVudCB0 byBmaW5kIHRoZSBlbnRyeSBpbiB0aGUgcGFyZW50Lg0KPiArwqDCoCBIb3dldmVyLCB0aGlzIG1h a2VzIGluZGV4ZWQga2V5IGxvb2t1cCBpbXBvc3NpYmxlIHdoaWxlIHJlcGFpcnMNCj4gYXJlIG9u Z29pbmcuDQo+ICsNCj4gKzIuIFdlIGNvdWxkIGFsbG93IGNyZWF0aW5nIGRpcmVjdG9yeSBlbnRy aWVzIGF0IHNwZWNpZmllZCBvZmZzZXRzLA0KPiB3aGljaCBzb2x2ZXMNCj4gK8KgwqAgdGhlIHJl ZmVyZW50aWFsIGludGVncml0eSBwcm9ibGVtIGJ1dCBydW5zIHRoZSByaXNrIHRoYXQgZGlyZW50 DQo+IGNyZWF0aW9uDQo+ICvCoMKgIHdpbGwgZmFpbCBkdWUgdG8gY29uZmxpY3RzIHdpdGggdGhl IGZyZWUgc3BhY2UgaW4gdGhlIGRpcmVjdG9yeS4NCj4gKw0KPiArwqDCoCBUaGVzZSBjb25mbGlj dHMgY291bGQgYmUgcmVzb2x2ZWQgYnkgYXBwZW5kaW5nIHRoZSBkaXJlY3RvcnkNCj4gZW50cnkg YW5kDQo+ICvCoMKgIGFtZW5kaW5nIHRoZSB4YXR0ciBjb2RlIHRvIHN1cHBvcnQgdXBkYXRpbmcg YW4geGF0dHIga2V5IGFuZA0KPiByZWluZGV4aW5nIHRoZQ0KPiArwqDCoCBkYWJ0cmVlLCB0aG91 Z2ggdGhpcyB3b3VsZCBoYXZlIHRvIGJlIHBlcmZvcm1lZCB3aXRoIHRoZSBwYXJlbnQNCj4gZGly ZWN0b3J5DQo+ICvCoMKgIHN0aWxsIGxvY2tlZC4NCj4gKw0KPiArMy4gU2FtZSBhcyBhYm92ZSwg YnV0IHJlbW92ZSB0aGUgb2xkIHBhcmVudCBwb2ludGVyIGVudHJ5IGFuZCBhZGQgYQ0KPiBuZXcg b25lDQo+ICvCoMKgIGF0b21pY2FsbHkuDQo+ICsNCj4gKzQuIENoYW5nZSB0aGUgb25kaXNrIHhh dHRyIGZvcm1hdCB0byBgYChwYXJlbnRfaW51bSwgbmFtZSkg4oaSDQo+IChwYXJlbnRfZ2VuKWBg LA0KPiArwqDCoCB3aGljaCB3b3VsZCBwcm92aWRlIHRoZSBhdHRyIG5hbWUgdW5pcXVlbmVzcyB0 aGF0IHdlIHJlcXVpcmUsDQo+IHdpdGhvdXQNCj4gK8KgwqAgZm9yY2luZyByZXBhaXIgY29kZSB0 byB1cGRhdGUgdGhlIGRpcmVudCBwb3NpdGlvbi4NCj4gK8KgwqAgVW5mb3J0dW5hdGVseSwgdGhp cyByZXF1aXJlcyBjaGFuZ2VzIHRvIHRoZSB4YXR0ciBjb2RlIHRvIHN1cHBvcnQNCj4gYXR0cg0K PiArwqDCoCBuYW1lcyBhcyBsb25nIGFzIDI2MyBieXRlcy4NCj4gKw0KPiArNS4gQ2hhbmdlIHRo ZSBvbmRpc2sgeGF0dHIgZm9ybWF0IHRvIGBgKHBhcmVudF9pbnVtLCBoYXNoKG5hbWUpKSDihpIN Cj4gK8KgwqAgKG5hbWUsIHBhcmVudF9nZW4pYGAuDQo+ICvCoMKgIElmIHRoZSBoYXNoIGlzIHN1 ZmZpY2llbnRseSByZXNpc3RhbnQgdG8gY29sbGlzaW9ucyAoZS5nLiBzaGEyNTYpDQo+IHRoZW4N Cj4gK8KgwqAgdGhpcyBzaG91bGQgcHJvdmlkZSB0aGUgYXR0ciBuYW1lIHVuaXF1ZW5lc3MgdGhh dCB3ZSByZXF1aXJlLg0KPiArwqDCoCBOYW1lcyBzaG9ydGVyIHRoYW4gMjQ3IGJ5dGVzIGNvdWxk IGJlIHN0b3JlZCBkaXJlY3RseS4NCkkgdGhpbmsgdGhlIFJGQyBkZWx1Z2UgaXMgdGhlIHNhbWUg cXVlc3Rpb24gYnV0IG1vcmUgY29udGV4dCwgc28NCnByb2JhYmx5IHRoaXMgc2VjdGlvbiB3aWxs IGZvbGxvdyB3aGF0IHdlIGRlY2lkZSB0aGVyZS4gIEkgd2lsbCBzYXZlDQpjb21tZW50YXJ5IHRv IGtlZXAgdGhlIGRpc2N1c3Npb24gaW4gdGhlIHNhbWUgdGhyZWFkLi4uDQoNCkknbGwganVzdCBs aW5rIGl0IGhlcmUgZm9yIGFueW9uZSBlbHNlIGZvbGxvd2luZyB0aGlzIGZvciBub3cuLi4NCmh0 dHBzOi8vd3d3LnNwaW5pY3MubmV0L2xpc3RzL2xpbnV4LXhmcy9tc2c2OTM5Ny5odG1sDQoNCj4g Kw0KPiArQ2FzZSBTdHVkeTogUmVwYWlyaW5nIFBhcmVudCBQb2ludGVycw0KPiArXl5eXl5eXl5e Xl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXg0KPiArDQo+ICtPbmxpbmUgcmVjb25zdHJ1Y3Rp b24gb2YgYSBmaWxlJ3MgcGFyZW50IHBvaW50ZXIgaW5mb3JtYXRpb24gd29ya3MNCj4gc2ltaWxh cmx5IHRvDQo+ICtkaXJlY3RvcnkgcmVjb25zdHJ1Y3Rpb246DQo+ICsNCj4gKzEuIFNldCB1cCBh IHRlbXBvcmFyeSBmaWxlIGZvciBnZW5lcmF0aW5nIGEgbmV3IGV4dGVuZGVkIGF0dHJpYnV0ZQ0K PiBzdHJ1Y3R1cmUsDQo+ICvCoMKgIGFuIHhmYmxvYiBmb3Igc3RvcmluZyBwYXJlbnQgcG9pbnRl ciBuYW1lcywgYW5kIGFuIHhmYXJyYXkgZm9yDQo+IHN0YXNoaW5nDQo+ICvCoMKgIHBhcmVudCBw b2ludGVyIHVwZGF0ZXMuDQp3ZSBkaWQgdGFsayBhYm91dCBibG9icyBpbiBwYXRjaCA2IHRob3Vn aCBpdCB0b29rIG1lIGEgbW9tZW50IHRvDQpyZW1lbWJlci4uLiBpZiB0aGVyZSdzIGEgd2F5IHRv IGxpbmsgb3IgdGFnIGl0LCB0aGF0IHdvdWxkIGJlIGhlbHBmdWwNCmZvciB3aXRoIHRoZSBxdWlj ayByZWZyZXNoLiAga2luZGEgbGlrZSB3aWtpcGVkaWEgaHlwZXJsaW5rcywgeW91DQpyZWFsbHkg b25seSBuZWVkIGxpa2UgdGhlIGZpcnN0IGxpbmUgb3IgdHdvIHRvIGdldCBpdCBzbmFwIGJhY2sN Cg0KPiArDQo+ICsyLiBTZXQgdXAgYW4gaW5vZGUgc2Nhbm5lciBhbmQgaG9vayBpbnRvIHRoZSBk aXJlY3RvcnkgZW50cnkgY29kZSB0bw0KPiByZWNlaXZlDQo+ICvCoMKgIHVwZGF0ZXMgb24gZGly ZWN0b3J5IG9wZXJhdGlvbnMuDQo+ICsNCj4gKzMuIEZvciBlYWNoIGRpcmVjdG9yeSBlbnRyeSBm b3VuZCBpbiBlYWNoIGRpcmVjdG9yeSBzY2FubmVkLCBkZWNpZGUNCj4gaWYgdGhlDQo+ICvCoMKg IGRpcmVudCByZWZlcmVuY2VzIHRoZSBmaWxlIG9mIGludGVyZXN0Lg0KPiArwqDCoCBJZiBzbzoN Cj4gKw0KPiArwqDCoCBhLiBTdGFzaCBhbiBhZGRwcHRyIGVudHJ5IGZvciB0aGlzIHBhcmVudCBw b2ludGVyIGluIHRoZSB4ZmJsb2INCj4gYW5kIHhmYXJyYXkNCj4gK8KgwqDCoMKgwqAgZm9yIGxh dGVyLg0KPiArDQo+ICvCoMKgIGIuIFdoZW4gZmluaXNoZWQgc2Nhbm5pbmcgdGhlIGRpcmVjdG9y eSwgZmx1c2ggdGhlIHN0YXNoZWQNCj4gdXBkYXRlcyB0byB0aGUNCj4gK8KgwqDCoMKgwqAgdGVt cG9yYXJ5IGRpcmVjdG9yeS4NCj4gKw0KPiArNC4gRm9yIGVhY2ggbGl2ZSBkaXJlY3RvcnkgdXBk YXRlIHJlY2VpdmVkIHZpYSB0aGUgaG9vaywgZGVjaWRlIGlmDQo+IHRoZSBwYXJlbnQNCj4gK8Kg wqAgaGFzIGFscmVhZHkgYmVlbiBzY2FubmVkLg0KPiArwqDCoCBJZiBzbzoNCj4gKw0KPiArwqDC oCBhLiBTdGFzaCBhbiBhZGRwcHRyIG9yIHJlbW92ZXBwdHIgZW50cnkgZm9yIHRoaXMgZGlyZW50 IHVwZGF0ZSBpbg0KPiB0aGUNCj4gK8KgwqDCoMKgwqAgeGZhcnJheSBmb3IgbGF0ZXIuDQo+ICvC oMKgwqDCoMKgIFdlIGNhbm5vdCB3cml0ZSBwYXJlbnQgcG9pbnRlcnMgZGlyZWN0bHkgdG8gdGhl IHRlbXBvcmFyeSBmaWxlDQo+IGJlY2F1c2UNCj4gK8KgwqDCoMKgwqAgaG9vayBmdW5jdGlvbnMg YXJlIG5vdCBhbGxvd2VkIHRvIG1vZGlmeSBmaWxlc3lzdGVtIG1ldGFkYXRhLg0KPiArwqDCoMKg wqDCoCBJbnN0ZWFkLCB3ZSBzdGFzaCB1cGRhdGVzIGluIHRoZSB4ZmFycmF5IGFuZCByZWx5IG9u IHRoZQ0KPiBzY2FubmVyIHRocmVhZA0KPiArwqDCoMKgwqDCoCB0byBhcHBseSB0aGUgc3Rhc2hl ZCBwYXJlbnQgcG9pbnRlciB1cGRhdGVzIHRvIHRoZSB0ZW1wb3JhcnkNCj4gZmlsZS4NCj4gKw0K PiArNS4gQ29weSBhbGwgbm9uLXBhcmVudCBwb2ludGVyIGV4dGVuZGVkIGF0dHJpYnV0ZXMgdG8g dGhlIHRlbXBvcmFyeQ0KPiBmaWxlLg0KPiArDQo+ICs2LiBXaGVuIHRoZSBzY2FuIGlzIGNvbXBs ZXRlLCBhdG9taWNhbGx5IHN3YXAgdGhlIGF0dHJpYnV0ZSBmb3JrIG9mDQo+IHRoZQ0KPiArwqDC oCB0ZW1wb3JhcnkgZmlsZSBhbmQgdGhlIGZpbGUgYmVpbmcgcmVwYWlyZWQuDQo+ICvCoMKgIFRo ZSB0ZW1wb3JhcnkgZmlsZSBub3cgY29udGFpbnMgdGhlIGRhbWFnZWQgZXh0ZW5kZWQgYXR0cmli dXRlDQo+IHN0cnVjdHVyZS4NCj4gKw0KPiArNy4gUmVhcCB0aGUgdGVtcG9yYXJ5IGZpbGUuDQpT ZWVtcyBsaWtlIGl0IHNob3VsZCB3b3JrDQoNCj4gKw0KPiArVGhlIHByb3Bvc2VkIHBhdGNoc2V0 IGlzIHRoZQ0KPiArYHBhcmVudCBwb2ludGVycyByZXBhaXINCj4gKzwNCj4gaHR0cHM6Ly9naXQu a2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvZGp3b25nL3hmcy1saW51eC5naXQv DQo+IGxvZy8/aD1wcHRycy1vbmxpbmUtcGFyZW50LXJlcGFpcj5gXw0KPiArc2VyaWVzLg0KPiAr DQo+ICtEaWdyZXNzaW9uOiBPZmZsaW5lIENoZWNraW5nIG9mIFBhcmVudCBQb2ludGVycw0KPiAr Xl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4NCj4gKw0KPiAr RXhhbWluaW5nIHBhcmVudCBwb2ludGVycyBpbiBvZmZsaW5lIHJlcGFpciB3b3JrcyBkaWZmZXJl bnRseQ0KPiBiZWNhdXNlIGNvcnJ1cHQNCj4gK2ZpbGVzIGFyZSBlcmFzZWQgbG9uZyBiZWZvcmUg ZGlyZWN0b3J5IHRyZWUgY29ubmVjdGl2aXR5IGNoZWNrcyBhcmUNCj4gcGVyZm9ybWVkLg0KPiAr UGFyZW50IHBvaW50ZXIgY2hlY2tzIGFyZSB0aGVyZWZvcmUgYSBzZWNvbmQgcGFzcyB0byBiZSBh ZGRlZCB0byB0aGUNCj4gZXhpc3RpbmcNCj4gK2Nvbm5lY3Rpdml0eSBjaGVja3M6DQo+ICsNCj4g KzEuIEFmdGVyIHRoZSBzZXQgb2Ygc3Vydml2aW5nIGZpbGVzIGhhcyBiZWVuIGVzdGFibGlzaGVk IChpLmUuIHBoYXNlDQo+IDYpLA0KPiArwqDCoCB3YWxrIHRoZSBzdXJ2aXZpbmcgZGlyZWN0b3Jp ZXMgb2YgZWFjaCBBRyBpbiB0aGUgZmlsZXN5c3RlbS4NCj4gK8KgwqAgVGhpcyBpcyBhbHJlYWR5 IHBlcmZvcm1lZCBhcyBwYXJ0IG9mIHRoZSBjb25uZWN0aXZpdHkgY2hlY2tzLg0KPiArDQo+ICsy LiBGb3IgZWFjaCBkaXJlY3RvcnkgZW50cnkgZm91bmQsIHJlY29yZCB0aGUgbmFtZSBpbiBhbiB4 ZmJsb2IsIGFuZA0KPiBzdG9yZQ0KPiArwqDCoCBgYChjaGlsZF9hZ19pbnVtLCBwYXJlbnRfaW51 bSwgcGFyZW50X2dlbiwgZGlyZW50X3BvcylgYCB0dXBsZXMNCj4gaW4gYQ0KPiArwqDCoCBwZXIt QUcgaW4tbWVtb3J5IHNsYWIuDQo+ICsNCj4gKzMuIEZvciBlYWNoIEFHIGluIHRoZSBmaWxlc3lz dGVtLA0KPiArDQo+ICvCoMKgIGEuIFNvcnQgdGhlIHBlci1BRyB0dXBsZXMgaW4gb3JkZXIgb2Yg Y2hpbGRfYWdfaW51bSwgcGFyZW50X2ludW0sDQo+IGFuZA0KPiArwqDCoMKgwqDCoCBkaXJlbnRf cG9zLg0KPiArDQo+ICvCoMKgIGIuIEZvciBlYWNoIGlub2RlIGluIHRoZSBBRywNCj4gKw0KPiAr wqDCoMKgwqDCoCAxLiBTY2FuIHRoZSBpbm9kZSBmb3IgcGFyZW50IHBvaW50ZXJzLg0KPiArwqDC oMKgwqDCoMKgwqDCoCBSZWNvcmQgdGhlIG5hbWVzIGluIGEgcGVyLWZpbGUgeGZibG9iLCBhbmQg c3RvcmUNCj4gYGAocGFyZW50X2ludW0sDQo+ICvCoMKgwqDCoMKgwqDCoMKgIHBhcmVudF9nZW4s IGRpcmVudF9wb3MpYGAgdHVwbGVzIGluIGEgcGVyLWZpbGUgc2xhYi4NCj4gKw0KPiArwqDCoMKg wqDCoCAyLiBTb3J0IHRoZSBwZXItZmlsZSB0dXBsZXMgaW4gb3JkZXIgb2YgcGFyZW50X2ludW0s IGFuZA0KPiBkaXJlbnRfcG9zLg0KPiArDQo+ICvCoMKgwqDCoMKgIDMuIFBvc2l0aW9uIG9uZSBz bGFiIGN1cnNvciBhdCB0aGUgc3RhcnQgb2YgdGhlIGlub2RlJ3MNCj4gcmVjb3JkcyBpbiB0aGUN Cj4gK8KgwqDCoMKgwqDCoMKgwqAgcGVyLUFHIHR1cGxlIHNsYWIuDQo+ICvCoMKgwqDCoMKgwqDC oMKgIFRoaXMgc2hvdWxkIGJlIHRyaXZpYWwgc2luY2UgdGhlIHBlci1BRyB0dXBsZXMgYXJlIGlu IGNoaWxkDQo+IGludW1iZXINCj4gK8KgwqDCoMKgwqDCoMKgwqAgb3JkZXIuDQo+ICsNCj4gK8Kg wqDCoMKgwqAgNC4gUG9zaXRpb24gYSBzZWNvbmQgc2xhYiBjdXJzb3IgYXQgdGhlIHN0YXJ0IG9m IHRoZSBwZXItZmlsZQ0KPiB0dXBsZSBzbGFiLg0KPiArDQo+ICvCoMKgwqDCoMKgIDUuIEl0ZXJh dGUgdGhlIHR3byBjdXJzb3JzIGluIGxvY2tzdGVwLCBjb21wYXJpbmcgdGhlDQo+IHBhcmVudF9p bm8gYW5kDQo+ICvCoMKgwqDCoMKgwqDCoMKgIGRpcmVudF9wb3MgZmllbGRzIG9mIHRoZSByZWNv cmRzIHVuZGVyIGVhY2ggY3Vyc29yLg0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoMKgIGEuIFR1cGxl cyBpbiB0aGUgcGVyLUFHIGxpc3QgYnV0IG5vdCB0aGUgcGVyLWZpbGUgbGlzdCBhcmUNCj4gbWlz c2luZyBhbmQNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbmVlZCB0byBiZSB3cml0dGVuIHRv IHRoZSBpbm9kZS4NCj4gKw0KPiArwqDCoMKgwqDCoMKgwqDCoCBiLiBUdXBsZXMgaW4gdGhlIHBl ci1maWxlIGxpc3QgYnV0IG5vdCB0aGUgcGVyLUFHIGxpc3QgYXJlDQo+IGRhbmdsaW5nDQo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGFuZCBuZWVkIHRvIGJlIHJlbW92ZWQgZnJvbSB0aGUgaW5v ZGUuDQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgwqAgYy4gRm9yIHR1cGxlcyBpbiBib3RoIGxpc3Rz LCB1cGRhdGUgdGhlIHBhcmVudF9nZW4gYW5kIG5hbWUNCj4gY29tcG9uZW50cw0KPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBvZiB0aGUgcGFyZW50IHBvaW50ZXIgaWYgbmVjZXNzYXJ5Lg0KPiAr DQo+ICs0LiBNb3ZlIG9uIHRvIGV4YW1pbmluZyBsaW5rIGNvdW50cywgYXMgd2UgZG8gdG9kYXku DQo+ICsNCj4gK1RoZSBwcm9wb3NlZCBwYXRjaHNldCBpcyB0aGUNCj4gK2BvZmZsaW5lIHBhcmVu dCBwb2ludGVycyByZXBhaXINCj4gKzwNCj4gaHR0cHM6Ly9naXQua2VybmVsLm9yZy9wdWIvc2Nt L2xpbnV4L2tlcm5lbC9naXQvZGp3b25nL3hmc3Byb2dzLWRldi5nDQo+IGl0L2xvZy8/aD1wcHRy cy1yZXBhaXI+YF8NCj4gK3Nlcmllcy4NCj4gKw0KPiArUmVidWlsZGluZyBkaXJlY3RvcmllcyBm cm9tIHBhcmVudCBwb2ludGVycyBpbiBvZmZsaW5lIHJlcGFpciBpcw0KPiB2ZXJ5DQo+ICtjaGFs bGVuZ2luZyBiZWNhdXNlIGl0IGN1cnJlbnRseSB1c2VzIGEgc2luZ2xlLXBhc3Mgc2NhbiBvZiB0 aGUNCj4gZmlsZXN5c3RlbQ0KPiArZHVyaW5nIHBoYXNlIDMgdG8gZGVjaWRlIHdoaWNoIGZpbGVz IGFyZSBjb3JydXB0IGVub3VnaCB0byBiZQ0KPiB6YXBwZWQuDQo+ICtUaGlzIHNjYW4gd291bGQg aGF2ZSB0byBiZSBjb252ZXJ0ZWQgaW50byBhIG11bHRpLXBhc3Mgc2NhbjoNCj4gKw0KPiArMS4g VGhlIGZpcnN0IHBhc3Mgb2YgdGhlIHNjYW4gemFwcyBjb3JydXB0IGlub2RlcywgZm9ya3MsIGFu ZA0KPiBhdHRyaWJ1dGVzDQo+ICvCoMKgIG11Y2ggYXMgaXQgZG9lcyBub3cuDQo+ICvCoMKgIENv cnJ1cHQgZGlyZWN0b3JpZXMgYXJlIG5vdGVkIGJ1dCBub3QgemFwcGVkLg0KPiArDQo+ICsyLiBU aGUgbmV4dCBwYXNzIHJlY29yZHMgcGFyZW50IHBvaW50ZXJzIHBvaW50aW5nIHRvIHRoZSBkaXJl Y3Rvcmllcw0KPiBub3RlZA0KPiArwqDCoCBhcyBiZWluZyBjb3JydXB0IGluIHRoZSBmaXJzdCBw YXNzLg0KPiArwqDCoCBUaGlzIHNlY29uZCBwYXNzIG1heSBoYXZlIHRvIGhhcHBlbiBhZnRlciB0 aGUgcGhhc2UgNCBzY2FuIGZvcg0KPiBkdXBsaWNhdGUNCj4gK8KgwqAgYmxvY2tzLCBpZiBwaGFz ZSA0IGlzIGFsc28gY2FwYWJsZSBvZiB6YXBwaW5nIGRpcmVjdG9yaWVzLg0KPiArDQo+ICszLiBU aGUgdGhpcmQgcGFzcyByZXNldHMgY29ycnVwdCBkaXJlY3RvcmllcyB0byBhbiBlbXB0eSBzaG9y dGZvcm0NCj4gZGlyZWN0b3J5Lg0KPiArwqDCoCBGcmVlIHNwYWNlIG1ldGFkYXRhIGhhcyBub3Qg YmVlbiBlbnN1cmVkIHlldCwgc28gcmVwYWlyIGNhbm5vdA0KPiB5ZXQgdXNlIHRoZQ0KPiArwqDC oCBkaXJlY3RvcnkgYnVpbGRpbmcgY29kZSBpbiBsaWJ4ZnMuDQo+ICsNCj4gKzQuIEF0IHRoZSBz dGFydCBvZiBwaGFzZSA2LCBzcGFjZSBtZXRhZGF0YSBoYXZlIGJlZW4gcmVidWlsdC4NCj4gK8Kg wqAgVXNlIHRoZSBwYXJlbnQgcG9pbnRlciBpbmZvcm1hdGlvbiByZWNvcmRlZCBkdXJpbmcgc3Rl cCAyIHRvDQo+IHJlY29uc3RydWN0DQo+ICvCoMKgIHRoZSBkaXJlbnRzIGFuZCBhZGQgdGhlbSB0 byB0aGUgbm93LWVtcHR5IGRpcmVjdG9yaWVzLg0KPiArDQo+ICtUaGlzIGNvZGUgaGFzIG5vdCB5 ZXQgYmVlbiBjb25zdHJ1Y3RlZC4NCj4gKw0KPiArLi4gX29ycGhhbmFnZToNCj4gKw0KPiArVGhl IE9ycGhhbmFnZQ0KPiArLS0tLS0tLS0tLS0tLQ0KPiArDQo+ICtGaWxlc3lzdGVtcyBwcmVzZW50 IGZpbGVzIGFzIGEgZGlyZWN0ZWQsIGFuZCBob3BlZnVsbHkgYWN5Y2xpYywNCj4gZ3JhcGguDQo+ ICtJbiBvdGhlciB3b3JkcywgYSB0cmVlLg0KPiArVGhlIHJvb3Qgb2YgdGhlIGZpbGVzeXN0ZW0g aXMgYSBkaXJlY3RvcnksIGFuZCBlYWNoIGVudHJ5IGluIGENCj4gZGlyZWN0b3J5IHBvaW50cw0K PiArZG93bndhcmRzIGVpdGhlciB0byBtb3JlIHN1YmRpcmVjdG9yaWVzIG9yIHRvIG5vbi1kaXJl Y3RvcnkgZmlsZXMuDQo+ICtVbmZvcnR1bmF0ZWx5LCBhIGRpc3J1cHRpb24gaW4gdGhlIGRpcmVj dG9yeSBncmFwaCBwb2ludGVycyByZXN1bHQNCj4gaW4gYQ0KPiArZGlzY29ubmVjdGVkIGdyYXBo LCB3aGljaCBtYWtlcyBmaWxlcyBpbXBvc3NpYmxlIHRvIGFjY2VzcyB2aWENCj4gcmVndWxhciBw YXRoDQo+ICtyZXNvbHV0aW9uLg0KPiArVGhlIGRpcmVjdG9yeSBwYXJlbnQgcG9pbnRlciBvbmxp bmUgc2NydWIgY29kZSBjYW4gZGV0ZWN0IGEgZG90ZG90DQo+IGVudHJ5DQo+ICtwb2ludGluZyB0 byBhIHBhcmVudCBkaXJlY3RvcnkgdGhhdCBkb2Vzbid0IGhhdmUgYSBsaW5rIGJhY2sgdG8gdGhl DQo+IGNoaWxkDQo+ICtkaXJlY3RvcnksIGFuZCB0aGUgZmlsZSBsaW5rIGNvdW50IGNoZWNrZXIg Y2FuIGRldGVjdCBhIGZpbGUgdGhhdA0KPiBpc24ndCBwb2ludGVkDQo+ICt0byBieSBhbnkgZGly ZWN0b3J5IGluIHRoZSBmaWxlc3lzdGVtLg0KPiArSWYgdGhlIGZpbGUgaW4gcXVlc3Rpb24gaGFz IGEgcG9zaXRpdmUgbGluayBjb3VudCwgdGhlIGZpbGUgaW4NCj4gcXVlc3Rpb24gaXMgYW4NCj4g K29ycGhhbi4NCg0KSG1tLCBJIGtpbmRhIGZlbHQgbGlrZSB0aGlzIHNob3VsZCBoYXZlIGZsb3dl ZCBpbnRvIHNvbWV0aGluZyBsaWtlOg0KIm5vdyB0aGF0IHdlIGhhdmUgcGFyZW50IHBvaW50ZXJz LCB3ZSBjYW4gcmVwYXJlbnQgdGhlbSBpbnN0ZWFkIG9mDQpwdXR0aW5nIHRoZW0gaW4gdGhlIG9y cGhhbmFnZS4uLiINCg0KPw0KPiArDQo+ICtXaGVuIG9ycGhhbnMgYXJlIGZvdW5kLCB0aGV5IHNo b3VsZCBiZSByZWNvbm5lY3RlZCB0byB0aGUgZGlyZWN0b3J5DQo+IHRyZWUuDQo+ICtPZmZsaW5l IGZzY2sgc29sdmVzIHRoZSBwcm9ibGVtIGJ5IGNyZWF0aW5nIGEgZGlyZWN0b3J5DQo+IGBgL2xv c3QrZm91bmRgYCB0bw0KPiArc2VydmUgYXMgYW4gb3JwaGFuYWdlLCBhbmQgbGlua2luZyBvcnBo YW4gZmlsZXMgaW50byB0aGUgb3JwaGFuYWdlDQo+IGJ5IHVzaW5nIHRoZQ0KPiAraW51bWJlciBh cyB0aGUgbmFtZS4NCj4gK1JlcGFyZW50aW5nIGEgZmlsZSB0byB0aGUgb3JwaGFuYWdlIGRvZXMg bm90IHJlc2V0IGFueSBvZiBpdHMNCj4gcGVybWlzc2lvbnMgb3INCj4gK0FDTHMuDQo+ICsNCj4g K1RoaXMgcHJvY2VzcyBpcyBtb3JlIGludm9sdmVkIGluIHRoZSBrZXJuZWwgdGhhbiBpdCBpcyBp biB1c2Vyc3BhY2UuDQo+ICtUaGUgZGlyZWN0b3J5IGFuZCBmaWxlIGxpbmsgY291bnQgcmVwYWly IHNldHVwIGZ1bmN0aW9ucyBtdXN0IHVzZQ0KPiB0aGUgcmVndWxhcg0KPiArVkZTIG1lY2hhbmlz bXMgdG8gY3JlYXRlIHRoZSBvcnBoYW5hZ2UgZGlyZWN0b3J5IHdpdGggYWxsIHRoZQ0KPiBuZWNl c3NhcnkNCj4gK3NlY3VyaXR5IGF0dHJpYnV0ZXMgYW5kIGRlbnRyeSBjYWNoZSBlbnRyaWVzLCBq dXN0IGxpa2UgYSByZWd1bGFyDQo+IGRpcmVjdG9yeQ0KPiArdHJlZSBtb2RpZmljYXRpb24uDQo+ ICsNCj4gK09ycGhhbmVkIGZpbGVzIGFyZSBhZG9wdGVkIGJ5IHRoZSBvcnBoYW5hZ2UgYXMgZm9s bG93czoNCj4gKw0KPiArMS4gQ2FsbCBgYHhyZXBfb3JwaGFuYWdlX3RyeV9jcmVhdGVgYCBhdCB0 aGUgc3RhcnQgb2YgdGhlIHNjcnViDQo+IHNldHVwIGZ1bmN0aW9uDQo+ICvCoMKgIHRvIHRyeSB0 byBlbnN1cmUgdGhhdCB0aGUgbG9zdCBhbmQgZm91bmQgZGlyZWN0b3J5IGFjdHVhbGx5DQo+IGV4 aXN0cy4NCj4gK8KgwqAgVGhpcyBhbHNvIGF0dGFjaGVzIHRoZSBvcnBoYW5hZ2UgZGlyZWN0b3J5 IHRvIHRoZSBzY3J1YiBjb250ZXh0Lg0KPiArDQo+ICsyLiBJZiB0aGUgZGVjaXNpb24gaXMgbWFk ZSB0byByZWNvbm5lY3QgYSBmaWxlLCB0YWtlIHRoZSBJT0xPQ0sgb2YNCj4gYm90aCB0aGUNCj4g K8KgwqAgb3JwaGFuYWdlIGFuZCB0aGUgZmlsZSBiZWluZyByZWF0dGFjaGVkLg0KPiArwqDCoCBU aGUgYGB4cmVwX29ycGhhbmFnZV9pb2xvY2tfdHdvYGAgZnVuY3Rpb24gZm9sbG93cyB0aGUgaW5v ZGUNCj4gbG9ja2luZw0KPiArwqDCoCBzdHJhdGVneSBkaXNjdXNzZWQgZWFybGllci4NCj4gKw0K PiArMy4gQ2FsbCBgYHhyZXBfb3JwaGFuYWdlX2NvbXB1dGVfYmxrcmVzYGAgYW5kDQo+IGBgeHJl cF9vcnBoYW5hZ2VfY29tcHV0ZV9uYW1lYGANCj4gK8KgwqAgdG8gY29tcHV0ZSB0aGUgbmV3IG5h bWUgaW4gdGhlIG9ycGhhbmFnZSBhbmQgdGhlIGJsb2NrDQo+IHJlc2VydmF0aW9uIHJlcXVpcmVk Lg0KPiArDQo+ICs0LiBVc2UgYGB4cmVwX29ycGhhbmFnZV9hZG9wdGlvbl9wcmVwYGAgdG8gcmVz ZXJ2ZSByZXNvdXJjZXMgdG8gdGhlDQo+IHJlcGFpcg0KPiArwqDCoCB0cmFuc2FjdGlvbi4NCj4g Kw0KPiArNS4gQ2FsbCBgYHhyZXBfb3JwaGFuYWdlX2Fkb3B0YGAgdG8gcmVwYXJlbnQgdGhlIG9y cGhhbmVkIGZpbGUgaW50bw0KPiB0aGUgbG9zdA0KPiArwqDCoCBhbmQgZm91bmQsIGFuZCB1cGRh dGUgdGhlIGtlcm5lbCBkZW50cnkgY2FjaGUuDQo+ICsNCj4gK1RoZSBwcm9wb3NlZCBwYXRjaGVz IGFyZSBpbiB0aGUNCj4gK2BvcnBoYW5hZ2UgYWRvcHRpb24NCj4gKzwNCj4gaHR0cHM6Ly9naXQu a2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvZGp3b25nL3hmcy1saW51eC5naXQv DQo+IGxvZy8/aD1yZXBhaXItb3JwaGFuYWdlPmBfDQo+ICtzZXJpZXMuDQoNCkNlcnRhaW5seSB3 ZSdsbCBuZWVkIHRvIGNvbWUgYmFjayBhbmQgdXBkYXRlIGFsbCB0aGUgcGFydHMgdGhhdCB3b3Vs ZA0KYmUgYWZmZWN0ZWQgYnkgdGhlIFJGQywgYnV0IG90aGVyd2lzZSBsb29rcyBvay4gIEl0IHNl ZW1zIHRyeWluZyB0bw0KZG9jdW1lbnQgY29kZSBiZWZvcmUgaXQncyB3cml0dGVuIHRlbmRzIHRv IGNhdXNlIHRoaW5ncyB0byBnbyBhcm91bmQNCmZvciBhIHdoaWxlLCBzaW5jZSB3ZSByZWFsbHkg anVzdCBjYW50IGtub3cgaG93IHN0YWJsZSBhIGRlc2lnbiBpcw0KdW50aWwgaXQncyBiZWVuIHRo cm91Z2ggYXQgbGVhc3QgYSBmZXcgcHJvdG90eXBlcy4NCg0KQWxsaXNvbg0K