From nobody Thu Sep 01 20:31:16 2022 X-Original-To: freebsd-fs@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4MJXkb5ykxz4bWHJ for ; Thu, 1 Sep 2022 20:31:19 +0000 (UTC) (envelope-from rmacklem@uoguelph.ca) Received: from CAN01-YQB-obe.outbound.protection.outlook.com (mail-yqbcan01on2059.outbound.protection.outlook.com [40.107.116.59]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mail.protection.outlook.com", Issuer "DigiCert Cloud Services CA-1" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4MJXkZ5P9Rz3pYv for ; Thu, 1 Sep 2022 20:31:18 +0000 (UTC) (envelope-from rmacklem@uoguelph.ca) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=LUO/OlRPq3ThW1zo+DGPKOckgnP68NofFh2Q/i0a4Ik7P6bF8tYKCy0+DkPMAz+TNW36dQUL1r7czUs2/AaYrrhZsRe4K6RwRD//dji3tDz4AJiEd/J3+eQkiCQScA0zqiRKU6rRJhUHbeJOlDxRLFGJ+faZa1pBwBzCu7dAgJs0I3RnVJ6ojTShOaDmvt9cCQ0jXbs37Ar2Ql1x/jtoWv7oqUPG0Wpe6r0zYWmgS7/h2hK9ZdNb2yVBtTXMbJ4YwXsjfQrmPk7En1xF8PfKRZthDJsClQDMuXUwJgQ8KuikChheGQyr6Qjby7a6IUod1DJMUcSrQeY/vnvgo+6qfA== 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=gTliJmIEZiPtA15DtWBppT0vKRiBKubvGqgiCfAqtxk=; b=a3zKS7y/1+QS0m+MKgPY6fi0edj1cu+PBuFSeeu8zHUahqgLMfHT33LVMMt7wB9hAxjz0YnI1XEsX+vUmVvJ7un/at6uSBBtO1apdgXXbUMheFUd+4gUvveAmnrX5Lptc7GdvgBLxB8DnBubMCWx8Plz2HzUQrrzksjUOf9O6jXB5xgFEKfs1wXbD7zjco9nAzHw8YR2vnasD07KoQJxFFDxY9QnBLQm43Ux+WPL8niQkyjcC/xq070dwAsPxQ5JbP3Oc7i2dfEDIrlNqAH0zw2R9cz/twNLeH9MGOhkSJUDNhdzyNqQwa3v5luo1bIW190bUYTSYBFCyPDP9nz0aQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=uoguelph.ca; dmarc=pass action=none header.from=uoguelph.ca; dkim=pass header.d=uoguelph.ca; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=uoguelph.ca; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=gTliJmIEZiPtA15DtWBppT0vKRiBKubvGqgiCfAqtxk=; b=qfHUHED+KlX/2DwMVkG9MclvUALSAoJjZBq1qFcxNvNYXdj7GdWxtpsujROC8ABE/dsnQfwQlWHgv2srB1A8gDdqESAP7BUzfyK12MBDMNvxN+IOi3XOB8C2WVwd9evN/3b91uzjre9GG3UV9chwa1Qinfk4bNQiRXltgv47wdTVTycPaClr4bMemEqOy+jVFSfv/cNrkWS/yFcONz7b/c94+TplN3nYbCp4CYPQo2yBufoEyOkRpHnLOeH8QwyYzOfWmkVdhTFdXndC6CluE7oegWgjYmVJrniaWLC7nbvocsdO7n6NVbN7XvFFuQA3C84icejJXmapoyZuxEX8xg== Received: from YQXPR01MB4150.CANPRD01.PROD.OUTLOOK.COM (2603:10b6:c01:6::7) by YT2PR01MB8744.CANPRD01.PROD.OUTLOOK.COM (2603:10b6:b01:bb::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5588.10; Thu, 1 Sep 2022 20:31:16 +0000 Received: from YQXPR01MB4150.CANPRD01.PROD.OUTLOOK.COM ([fe80::980d:23ea:9bc2:9f37]) by YQXPR01MB4150.CANPRD01.PROD.OUTLOOK.COM ([fe80::980d:23ea:9bc2:9f37%9]) with mapi id 15.20.5588.012; Thu, 1 Sep 2022 20:31:16 +0000 From: Rick Macklem To: Konstantin Belousov CC: FreeBSD Filesystems Subject: Re: SEEK_DATA/SEEK_HOLE with vnode locked Thread-Topic: SEEK_DATA/SEEK_HOLE with vnode locked Thread-Index: AQHYrQY7fWQ5YS0dF02y4OgRBDgrJa2owxGAgA/DcfWAAQ8LgIAAYqWLgAZuEYCACr6dOw== Date: Thu, 1 Sep 2022 20:31:16 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: yes X-MS-TNEF-Correlator: msip_labels: x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 61a7b2b1-af2d-4e63-a34e-08da8c58ebca x-ms-traffictypediagnostic: YT2PR01MB8744:EE_ x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: oLZ4dw8EnqGV1pjA4nUJqXf+hdSUO0g2HXHu8fgpxPXpg+J8+hibTPKLBp9Z9a4rTlZ2vpfMeQHM2yGZso25ylhM9FRR2qY49x/gkVeOO5mCGJI3RLCRzcxfIKjTvteP7YrHKa3jolWoWaVJrVb8C4HsgVXAb+BACKy1zpNdUZGjfD5W3/fGxRlheYqjrcOckSM/xloZIkXKzpaUUCVaSa1xoVABSV0UGMhPyRBwUEjhbzRfl247SeOmEjH/JgK/JdFBn0+l2/S4rJ+QJzqtNOwaEztmFbQ6GnCkF16Mf4RDmXHk83+WVwHi3ONq1N1S063OhGhlhtwDFACPkeyGP7ZXbOpcJBOJwUxIwbr7L1Fr9wMvlQsKgFWhBbOzECveSSPexp6cnHZykns3sxfaFIBBcQez5gVZy/movBjBb/l3FiX8ipvRqx5zrLYClcP8s7GlFntVgm5Q03r+yrmWL+qdbt/grdM4XgD3cLlXP8m2azExF9BAMotbsa8JWNHCMC7swH7S+qKhQvQ+yuP0SrKC/dctsJ4CVQ3JsylqB2JE6ODxyyrCjCktOw89ArCbY2ukiKAi1y3zj5aIcxoFy8VLjznaydsQ0KzfWrk7RLyxIrope3T2R2Qe5yUYWpD3bUJzX9kKdFg3Oh2s2wRd2CNVgm9fwhcmr00UU046qysM1ebOMj+38YTdcBEz6F+dkfX9KnfNKvscfjCdEAb2zPkSXtzjyiUWX6Vlp1i5pdJsM3VBstoqbZchDuqVAcG/NsfLu1WiBhvxPWiWbHIR/3VBoIzgMjzhHh1ZLCHlx8w= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:YQXPR01MB4150.CANPRD01.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230016)(4636009)(39860400002)(376002)(366004)(346002)(396003)(136003)(6506007)(786003)(2906002)(7696005)(9686003)(6916009)(86362001)(316002)(122000001)(41320700001)(8676002)(38070700005)(66946007)(99936003)(66446008)(76116006)(52536014)(4326008)(186003)(91956017)(478600001)(66476007)(66556008)(8936002)(55016003)(38100700002)(71200400001)(33656002)(41300700001)(64756008)(5660300002)(21314003);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?f1Ze8L0wSJM5ZWGpd8psGLBfI6wE0qXlVhacrXg1PNxi4CvXTUXlPmnYDl?= =?iso-8859-1?Q?rooltoshxAYeMCf0xjznjsGPJuvnX+PlxP1GFhl2ZIQ8Fgt+Y1aFMQMcb9?= =?iso-8859-1?Q?9JOL922AbWnm1tpLphcN7BcZ4Flr1jLyd33tf/qj4ThKzcAquhbWOvg0px?= =?iso-8859-1?Q?x/cWcX8YwEU8UO8a0nXqvPlbT/fG9/twGXp6Mu93E+Umayk/bYDDP0dpuI?= =?iso-8859-1?Q?r7yUMsszHtbBVzzaadV7XW6n54t8Xu+NNHbDNZoOaXXumbn9Ehf1csKmtU?= =?iso-8859-1?Q?nY/KKBCqARXp2lqrLM1WF4jkrUwFKMk4gpO8qai/JGrtHOGY/sFCgTCnuE?= =?iso-8859-1?Q?x5eNzUX39/K7pthtavu74Bdf6QI1YWLnQuRMlK4K+oeEb5KcQ9vo+eU79P?= =?iso-8859-1?Q?kythStR5ZKkx+ocu36LTrCCGSkVjdE2yTRYduEIdbMUJUJPp5h/H/gaJkp?= =?iso-8859-1?Q?KW2/QFmj5aE7cCWoPNFB+A53vr7HoUMCfaCAhklnsH0/zI3z1GbLvyBfwX?= =?iso-8859-1?Q?LgQJOXjhy70A0de8r8ziaiwvfmgM+baiiLwMSXJxeOGDlFUZoQv7rCK9hC?= =?iso-8859-1?Q?FvCYpj/G6toaGu4j7xIc/dXzVgmcKN139ySLWYZMF6ENbV7puh3Rhm3f7/?= =?iso-8859-1?Q?Fh8/Lsa+DpLNmMftTLzc9VFxiCQakk5WT3NQRV6BhOMxLxDo5I0g/CTZbd?= =?iso-8859-1?Q?/fLmoEnlv+6vF/7RthSj+V/GwdL1f8GLJZsDeYzcH64t9938YSeDnsVXo6?= =?iso-8859-1?Q?fsr28OPLI6+a70TMQpPtuW3BD/fIYqWDEDexjq0IKHSaBXG4QZ4vE/ne5H?= =?iso-8859-1?Q?hWolcrBYCqWisLNHlJfi1ePp7ksPMEba83lk3HaHqK4cZ1KUlV1/lzFKvI?= =?iso-8859-1?Q?U6if9HJgoSKUgWMidETIZHOvRoIN+tJca1goy60S+VEalDr7qRtVf7hlwt?= =?iso-8859-1?Q?AqmhVyia1PoaGqFuDu9W3z5CI05r1I3BVNv9wAojLaW0fy8q39OzFemzVb?= =?iso-8859-1?Q?MDpmu9tDUDmpa28v4mWplJghKBtUDM+cvRQchzlv3isgBNhi0nF/Z7DxW1?= =?iso-8859-1?Q?OMuOEKTmbVxP0OHXzWbdI0F65oSjcLrFAnOs80BaGlB0SP5uCmYIXiASwr?= =?iso-8859-1?Q?Rf+uEzgKJzmsCzE804seSxgETn9QblIkjXL1n1hz4x1pOxdPlHFFTYapW4?= =?iso-8859-1?Q?Ze1z2ZJ3aj2vELJO69jMxhGUy1srGKyO+BAhLaDisrk8cxFjd87v284Iv6?= =?iso-8859-1?Q?YA0p1RfQFcl/IvMAfyftth5Gz+r/zOqKXAMID+PiMaIfrNQ3bfj8Z8KMza?= =?iso-8859-1?Q?pMZhIRQA+jFqq3sQ1Z5MjVA4x3HlyC+vfNC0DgGiUnIOTeHpwG+nGUo9nE?= =?iso-8859-1?Q?5I+HaoV/blYmx1n1qzeWtS+CscFaFm4gWlDi4yjdVVR1s46Uzsgto0BEt0?= =?iso-8859-1?Q?4MBVDgQZt5Rbd1ZOraSDyWrsbH9BfsuwJgZ2qYaA+HGT4iChKIBd/NE2wK?= =?iso-8859-1?Q?Rh7y3n5Ok47eJce46WXtf8aEUiNihwQ0eJPVsd1QNMT988GjaQaKHLSIiX?= =?iso-8859-1?Q?pxm8mLbLz+SMLeABRsO8p1ly3JzIY5Z+I9WS6ivZ8YRFqRQOKwPS0xxgbF?= =?iso-8859-1?Q?LN0/tbHbRKXo8RY4R/nWqEKZMDwTeMxMa+72IlruUmVwFo/kVkxnpnjqw+?= =?iso-8859-1?Q?jtJ+727yXZQWh17m0OENZ4/YpmidcHZDxYH0mksT?= Content-Type: multipart/mixed; boundary="_003_YQXPR01MB4150BC25A9767E42251730DFDD7B9YQXPR01MB4150CANP_" List-Id: Filesystems List-Archive: https://lists.freebsd.org/archives/freebsd-fs List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-fs@freebsd.org MIME-Version: 1.0 X-OriginatorOrg: uoguelph.ca X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: YQXPR01MB4150.CANPRD01.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-Network-Message-Id: 61a7b2b1-af2d-4e63-a34e-08da8c58ebca X-MS-Exchange-CrossTenant-originalarrivaltime: 01 Sep 2022 20:31:16.6658 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: be62a12b-2cad-49a1-a5fa-85f4f3156a7d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: LIMF5P5erKdqsVDLGHV2x6oZzX6Hfo3Jw7rjrsfN1+C88AnZR9PHqXOgYyXqGrA5q1gca+va+5ZzaQbrxLYAQg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: YT2PR01MB8744 X-Rspamd-Queue-Id: 4MJXkZ5P9Rz3pYv X-Spamd-Bar: ---- Authentication-Results: mx1.freebsd.org; dkim=pass header.d=uoguelph.ca header.s=selector2 header.b=qfHUHED+; arc=pass ("microsoft.com:s=arcselector9901:i=1"); dmarc=pass (policy=none) header.from=uoguelph.ca; spf=pass (mx1.freebsd.org: domain of rmacklem@uoguelph.ca designates 40.107.116.59 as permitted sender) smtp.mailfrom=rmacklem@uoguelph.ca X-Spamd-Result: default: False [-4.90 / 15.00]; ARC_ALLOW(-1.00)[microsoft.com:s=arcselector9901:i=1]; MIME_BASE64_TEXT_BOGUS(1.00)[]; DWL_DNSWL_LOW(-1.00)[uoguelph.ca:dkim]; NEURAL_HAM_LONG(-1.00)[-1.000]; NEURAL_HAM_SHORT(-1.00)[-1.000]; NEURAL_HAM_MEDIUM(-1.00)[-0.999]; DMARC_POLICY_ALLOW(-0.50)[uoguelph.ca,none]; R_SPF_ALLOW(-0.20)[+ip4:40.107.0.0/16]; R_DKIM_ALLOW(-0.20)[uoguelph.ca:s=selector2]; MIME_BASE64_TEXT(0.10)[]; MIME_GOOD(-0.10)[multipart/mixed,text/plain]; FROM_HAS_DN(0.00)[]; TO_MATCH_ENVRCPT_SOME(0.00)[]; FREEFALL_USER(0.00)[rmacklem]; ASN(0.00)[asn:8075, ipnet:40.104.0.0/14, country:US]; MIME_TRACE(0.00)[0:+,1:+,2:+,3:+]; MLMMJ_DEST(0.00)[freebsd-fs@freebsd.org]; TO_DN_ALL(0.00)[]; RCVD_COUNT_THREE(0.00)[3]; HAS_ATTACHMENT(0.00)[]; RCVD_TLS_LAST(0.00)[]; DKIM_TRACE(0.00)[uoguelph.ca:+]; FREEMAIL_TO(0.00)[gmail.com]; RCPT_COUNT_TWO(0.00)[2]; FROM_EQ_ENVFROM(0.00)[]; RWL_MAILSPIKE_POSSIBLE(0.00)[40.107.116.59:from] X-ThisMailContainsUnwantedMimeParts: N --_003_YQXPR01MB4150BC25A9767E42251730DFDD7B9YQXPR01MB4150CANP_ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Konstantin Belousov wrote:=0A= [stuff snipped]=0A= >Could you arrange some local test, without NFS, please?=0A= >I might try to take a look at UFS then.=0A= Well, the two attached trivial programs seem to demonstrate=0A= the problem. crsparse.c just creates a sparse file, then readsparse.c=0A= reads the file, either with just read(2) or using SEEK_HOLE/SEEK_DATA=0A= if "-s" is specified on the command line.=0A= $ crsparse xxx=0A= $ time readsparse xxx=0A= $ time readsparse xxx=0A= $ time readsparse -s xxx=0A= $ time readsparse -s xxx=0A= =0A= However, when you look at readsparse.c, you will note that it=0A= does the reading in 1Mbyte chunks, which is what the NFS server=0A= will see for ReadPlus.=0A= If you modify it to do the reading in large chunks, there is no=0A= longer a performance problem.=0A= =0A= In summary, I think the performance problem is pretty=0A= specific to how ReadPlus would use SEEK_DATA/SEEK_HOLE,=0A= so I doubt it is worth exploring?=0A= =0A= Btw, Linux has now decided to implement ReadPlus just like=0A= Read and not look for/process holes. They are convinced=0A= that ReadPlus can only efficiently find holes if there is a file=0A= system specific method (ie. a VOP call for FreeBSD) that returns=0A= both data and holes. Until then, ReadPlus won't be any different=0A= than Read for them.=0A= --> I could do this, but I don't see any point, at this time.=0A= It also appears to violate the intent of ReadPlus in the RFC,=0A= if not actually a strict violation of the RFC.=0A= =0A= rick=0A= ps: readsparse.c works well either way for ZFS, so it was some=0A= other mysterious weirdness that caused ZFS to be really=0A= slow for ReadPlus?=0A= =0A= --_003_YQXPR01MB4150BC25A9767E42251730DFDD7B9YQXPR01MB4150CANP_ Content-Type: text/plain; name="crsparse.c" Content-Description: crsparse.c Content-Disposition: attachment; filename="crsparse.c"; size=748; creation-date="Thu, 01 Sep 2022 20:30:47 GMT"; modification-date="Thu, 01 Sep 2022 20:30:47 GMT" Content-Transfer-Encoding: base64 I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0cmluZy5o PgojaW5jbHVkZSA8ZmNudGwuaD4KI2luY2x1ZGUgPGVycm5vLmg+CiNpbmNsdWRlIDxzeXMvcGFy YW0uaD4KI2luY2x1ZGUgPHN5cy90eXBlcy5oPgojaW5jbHVkZSA8c3lzL3N0YXQuaD4KI2luY2x1 ZGUgPGVyci5oPgojaW5jbHVkZSA8dW5pc3RkLmg+CgpzdGF0aWMgY2hhciBvdXRidWZbMTA0ODU3 Nl07CgppbnQKbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQp7CglpbnQgaSwgb3V0ZmQ7Cglj aGFyIGNwOwoKCWlmIChhcmdjICE9IDIpCgkJZXJyeCgxLCAiVXNhZ2U6IGNyc3BhcnNlIDxvdXRm aWxlPiIpOwoJLyogRmlsbCBpbiBvdXRidWYgd2l0aCB0aGUgYWxwaGFiZXQuICovCgljcCA9ICdh JzsKCWZvciAoaSA9IDA7IGkgPCBzaXplb2Yob3V0YnVmKTsgaSsrKSB7CgkJb3V0YnVmW2ldID0g Y3ArKzsKCQlpZiAoY3AgPiAneicpCgkJCWNwID0gJ2EnOwoJfQoJb3V0ZmQgPSBvcGVuKGFyZ3Zb MV0sIE9fQ1JFQVQgfCBPX1JEV1IsIDA2NDQpOwoJaWYgKG91dGZkIDwgMCkKCQllcnIoMSwgImNh bid0IG9wZW4gJXMiLCBhcmd2WzFdKTsKCgkvKiBDcmVhdGUgdGhlIHNwYXJzZSBmaWxlLiAqLwoJ bHNlZWsob3V0ZmQsIDEwMjQgKiBzaXplb2Yob3V0YnVmKSwgU0VFS19DVVIpOwoJZm9yIChpID0g MDsgaSA8IDI1NjsgaSsrKSB7CgkJd3JpdGUob3V0ZmQsIG91dGJ1Ziwgc2l6ZW9mKG91dGJ1Zikp OwoJfQp9Cg== --_003_YQXPR01MB4150BC25A9767E42251730DFDD7B9YQXPR01MB4150CANP_ Content-Type: text/plain; name="readsparse.c" Content-Description: readsparse.c Content-Disposition: attachment; filename="readsparse.c"; size=2141; creation-date="Thu, 01 Sep 2022 20:31:11 GMT"; modification-date="Thu, 01 Sep 2022 20:31:11 GMT" Content-Transfer-Encoding: base64 I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0cmluZy5o PgojaW5jbHVkZSA8c3RkYm9vbC5oPgojaW5jbHVkZSA8ZmNudGwuaD4KI2luY2x1ZGUgPGVycm5v Lmg+CiNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KI2luY2x1ZGUgPHN5cy90eXBlcy5oPgojaW5jbHVk ZSA8c3lzL3N0YXQuaD4KI2luY2x1ZGUgPGVyci5oPgojaW5jbHVkZSA8dW5pc3RkLmg+CiNpbmNs dWRlIDxnZXRvcHQuaD4KCmNoYXIgYnVmWzEwMjQgKiAxMDI0XTsKCi8qIFJlYWQgMU1ieXRlIHVz aW5nIFNFRUtfREFUQS9TRUVLX0hPTEUuICovCnNzaXplX3QKcmVhZHNwMW0oY2hhciAqaW5maWxl LCBvZmZfdCBvZmZwb3MpCnsKCWludCBpbmZkOwoJb2ZmX3Qgc2Vla2RhdGEsIHNlZWtob2xlOwoJ c2l6ZV90IGxlbiwgeGZlcjsKCXNzaXplX3QgcnNpejsKCglpbmZkID0gb3BlbihpbmZpbGUsIE9f UkRPTkxZLCAwKTsKCWlmIChpbmZkIDwgMCkKCQllcnIoMSwgImNhbid0IG9wZW4gJXMiLCBpbmZp bGUpOwoKCXNlZWtkYXRhID0gbHNlZWsoaW5mZCwgb2ZmcG9zLCBTRUVLX0RBVEEpOwoJaWYgKHNl ZWtkYXRhIDwgMCkKCQlyZXR1cm4gKDApOwoJaWYgKHNlZWtkYXRhID49IG9mZnBvcyArIDEwMjQg KiAxMDI0KQoJCXJldHVybiAoMTAyNCAqIDEwMjQpOwoJbGVuID0gMTAyNCAqIDEwMjQ7CglpZiAo c2Vla2RhdGEgPiBvZmZwb3MpCgkJbGVuIC09IHNlZWtkYXRhIC0gb2ZmcG9zOwoJZG8gewoJCXNl ZWtob2xlID0gbHNlZWsoaW5mZCwgc2Vla2RhdGEsIFNFRUtfSE9MRSk7CgkJaWYgKHNlZWtob2xl ID4gb2ZmcG9zICsgMTAyNCAqIDEwMjQpCgkJCXNlZWtob2xlID0gb2ZmcG9zICsgMTAyNCAqIDEw MjQ7CgkJeGZlciA9IGxlbjsKCQlpZiAoc2Vla2hvbGUgLSBzZWVrZGF0YSA8IHhmZXIpCgkJCXhm ZXIgPSBzZWVraG9sZSAtIHNlZWtkYXRhOwoJCWlmICh4ZmVyID4gMCkgewoJCQlpZiAobHNlZWso aW5mZCwgc2Vla2RhdGEsIFNFRUtfU0VUKSA8IDApCgkJCQllcnIoMSwgIkxzZWVrIHNldCBmYWls ZWQiKTsKCQkJcnNpeiA9IHJlYWQoaW5mZCwgYnVmLCB4ZmVyKTsKCQkJaWYgKHJzaXogPCAwKQoJ CQkJZXJyKDEsICJSZWFkIHJldHVybmVkICVsZCIsIHJzaXopOwoJCQlsZW4gLT0geGZlcjsKCQl9 CgkJc2Vla2RhdGEgPSBsc2VlayhpbmZkLCBzZWVraG9sZSwgU0VFS19EQVRBKTsKCX0gd2hpbGUg KHNlZWtkYXRhID49IDAgJiYgc2Vla2RhdGEgPCBvZmZwb3MpOwoJY2xvc2UoaW5mZCk7CglyZXR1 cm4gKDEwMjQgKiAxMDI0KTsKfQoKLyogUmVhZCAxTWJ5dGUuICovCnNzaXplX3QKcmVhZDFtKGNo YXIgKmluZmlsZSwgb2ZmX3Qgb2ZmcG9zKQp7CglpbnQgaW5mZDsKCXNzaXplX3QgcnNpejsKCglp bmZkID0gb3BlbihpbmZpbGUsIE9fUkRPTkxZLCAwKTsKCWlmIChpbmZkIDwgMCkKCQllcnIoMSwg ImNhbid0IG9wZW4gJXMiLCBpbmZpbGUpOwoKCWlmIChsc2VlayhpbmZkLCBvZmZwb3MsIFNFRUtf U0VUKSA8IDApCgkJZXJyKDEsICJMc2VlayBzZXQgZmFpbGVkIik7Cglyc2l6ID0gcmVhZChpbmZk LCBidWYsIDEwMjQgKiAxMDI0KTsKCWlmIChyc2l6IDwgMCkKCQllcnIoMSwgIlJlYWQgcmV0dXJu ZWQgJWxkIiwgcnNpeik7CgljbG9zZShpbmZkKTsKCXJldHVybiAocnNpeik7Cn0KCmludAptYWlu KGludCBhcmdjLCBjaGFyICphcmd2W10pCnsKCW9mZl90IG9mZnBvczsKCXNzaXplX3QgcnM7Cglj aGFyIGM7Cglib29sIHJlYWRzcDsKCglyZWFkc3AgPSBmYWxzZTsKCXdoaWxlICgoYyA9IGdldG9w dChhcmdjLCBhcmd2LCAicyIpKSAhPSAtMSkKCQlzd2l0Y2ggKGMpIHsKCQljYXNlICdzJzoKCQkJ cmVhZHNwID0gdHJ1ZTsKCQkJYnJlYWs7CgkJZGVmYXVsdDoKCQkJZXJyeCgxLCAiQmFkIG9wdGlv biAlYyIsIGMpOwoJCX0KCWFyZ3YgKz0gb3B0aW5kOwoJYXJnYyAtPSBvcHRpbmQ7CglpZiAoYXJn YyAhPSAxKQoJCWVycngoMSwgIlVzYWdlOiByZWFkc3BhcnNlIDxpbmZpbGU+Iik7CglvZmZwb3Mg PSAwOwoJZG8gewoJCWlmIChyZWFkc3ApCgkJCXJzID0gcmVhZHNwMW0oYXJndlswXSwgb2ZmcG9z KTsKCQllbHNlCgkJCXJzID0gcmVhZDFtKGFyZ3ZbMF0sIG9mZnBvcyk7CgkJb2ZmcG9zICs9IDEw MjQgKiAxMDI0OwoJfSB3aGlsZSAocnMgPiAwKTsKfQo= --_003_YQXPR01MB4150BC25A9767E42251730DFDD7B9YQXPR01MB4150CANP_--