From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: <ffmpeg-devel-bounces@ffmpeg.org> Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTPS id 30D3F4B182 for <ffmpegdev@gitmailbox.com>; Thu, 24 Apr 2025 14:47:31 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 1020868B672; Thu, 24 Apr 2025 17:47:27 +0300 (EEST) Received: from nef.ens.fr (nef2.ens.fr [129.199.96.40]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 987A46882FB for <ffmpeg-devel@ffmpeg.org>; Thu, 24 Apr 2025 17:47:20 +0300 (EEST) X-ENS-nef-client: 129.199.129.80 ( name = phare.normalesup.org ) Received: from phare.normalesup.org (phare.normalesup.org [129.199.129.80]) by nef.ens.fr (8.14.4/1.01.28121999) with ESMTP id 53OElJ2N001537 for <ffmpeg-devel@ffmpeg.org>; Thu, 24 Apr 2025 16:47:20 +0200 Received: by phare.normalesup.org (Postfix, from userid 1001) id D30822EFE7; Thu, 24 Apr 2025 16:47:19 +0200 (CEST) Date: Thu, 24 Apr 2025 16:47:19 +0200 From: Nicolas George <george@nsup.org> To: FFmpeg development discussions and patches <ffmpeg-devel@ffmpeg.org> Message-ID: <aApO93t0mv_talsa@phare.normalesup.org> References: <DM8P223MB036504CFC0521633C2ADCCE3BABB2@DM8P223MB0365.NAMP223.PROD.OUTLOOK.COM> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <DM8P223MB036504CFC0521633C2ADCCE3BABB2@DM8P223MB0365.NAMP223.PROD.OUTLOOK.COM> X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.4.3 (nef.ens.fr [129.199.96.32]); Thu, 24 Apr 2025 16:47:20 +0200 (CEST) Subject: [FFmpeg-devel] On errors, asserts and crashing (was: Shaping the AVTextFormat API Surface) X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches <ffmpeg-devel.ffmpeg.org> List-Unsubscribe: <https://ffmpeg.org/mailman/options/ffmpeg-devel>, <mailto:ffmpeg-devel-request@ffmpeg.org?subject=unsubscribe> List-Archive: <https://ffmpeg.org/pipermail/ffmpeg-devel> List-Post: <mailto:ffmpeg-devel@ffmpeg.org> List-Help: <mailto:ffmpeg-devel-request@ffmpeg.org?subject=help> List-Subscribe: <https://ffmpeg.org/mailman/listinfo/ffmpeg-devel>, <mailto:ffmpeg-devel-request@ffmpeg.org?subject=subscribe> Reply-To: FFmpeg development discussions and patches <ffmpeg-devel@ffmpeg.org> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" <ffmpeg-devel-bounces@ffmpeg.org> Archived-At: <https://master.gitmailbox.com/ffmpegdev/aApO93t0mv_talsa@phare.normalesup.org/> List-Archive: <https://master.gitmailbox.com/ffmpegdev/> List-Post: <mailto:ffmpegdev@gitmailbox.com> c29mdHdvcmt6IC4gKEhFMTIwMjUtMDQtMjIpOgo+IEF0IHRoZSBpbXBsZW1lbnRhdGlvbiBsZXZl bCwgSSBzZW5zZWQgdGhhdCAieW91IiAoIkZGbXBlZyIpCj4gYXJlIGZvbGxvd2luZyBzb21lIHBy aW5jaXBsZXMgd2hpY2ggYXJlIHNvbWV3aGF0IGNvbnRyYWRpY3RpdmUgdG8gCj4gdGhvc2UgdGhh dCBJJ20gdXN1YWxseSBhZGhlcmluZyB0byAoZS5nLiAicGFyYW1ldGVyIHZhbGlkYXRpb24KPiBi ZWluZyBhIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBjYWxsIHNpdGUsIGNyYXNoaW5nIG90aGVyd2lz ZSAKPiBiZWluZyBhY2NlcHRhYmxlIikuIE5vbmV0aGVsZXNzLCBJJ20gdGhlIG9uZSB3aG8gaGFz IHRvIGFkYXB0LAo+IGFuZCBJJ20gbm90IGdvaW5nIHRvIHF1ZXN0aW9uIHRoYXQuCgpJIGFtIGZl ZWxpbmcgZGlkYWN0aWMsIHNvIEkgd2lsbCB3cml0ZSB3aGF0IEkgaGF2ZSB0byBzYXkgb24gdGhl IHRvcGljCmluIGZ1bGwgZGV0YWlscywgc28gdGhhdCBpdCBjYW4gYWxzbyBzZXJ2ZSBhcyBmdXR1 cmUgcmVmZXJlbmNlLgoKQ3Jhc2hpbmcgaW1tZWRpYXRlbHkgd2hlbiBzb21lIHVuZXhwZWN0ZWQg Y29uZGl0aW9uIGhhcHBlbnMgaXMgbm90IGEKcXVpcmsgb2YgYSBmZXcgRkZtcGVnIGRldmVsb3Bl cnMsIGl0IGlzIHZlcnkgb2Z0ZW4gdGhlIG9ubHkgd2F5IHRvIGRvCnRoaW5ncyBhbmQgYWxzbyBv ZnRlbiBiZXR0ZXIgdGhhbiBhbnkgYXZhaWxhYmxlIGFsdGVybmF0aXZlLiBLbm93aW5nCndoYXQg dG8gZG8gd2hlbiBpdCBpcyBvbmx5IGFuIG9wdGlvbiBpcyBub3QgYWx3YXlzIG9idmlvdXMsIGJ1 dCB0aGlzIGlzCkZGbXBlZywgbm90IHNvbWUgbWFuYWdlbWVudCBzb2Z0d2FyZSBwcm9qZWN0IGRl dmVsb3BlZCBieSBlbmdpbmVlcnMKZnJlc2ggZnJvbSBhbiBhdmVyYWdlIHNjaG9vbC4KCkNvbnNp ZGVyIHRoZSBzaW1wbGVzdCBtYXRoZW1hdGljYWwgb3BlcmF0aW9uIHRoYXQgY2FuIGZhaWwsIGEg ZGl2aXNpb246CgoJYSA9IGIgLyBjOwoKV2hhdCBoYXBwZW5zIGlmIGMgaXMgMD8KCkl0IGRlcGVu ZHM6IG9uIHRoZSBsYW5ndWFnZSwgdGhlIENQVSwgdGhlIGJ1aWxkIG9wdGlvbnMsIHBvc3NpYmx5 IHRoZQpwaGFzZXMgb2YgdGhlIE1vb24uIEJ1dCBtb3N0bHksIHdoYXQgaGFwcGVucyBsaXZlcyBi ZXR3ZWVuIHR3byBleHRyZW1lczoKCi0gaXQgY3Jhc2hlcyBpbW1lZGlhdGVseSwgc29tZXRpbWVz IGV2ZW4gd2l0aCBhIGhhcmR3YXJlIGV4Y2VwdGlvbgogIGdlbmVyYXRlZCBieSB0aGUgQ1BVOwoK LSBpdCByZXR1cm5zIHNvbWUga2luZCBvZiBjaGVlc3kgbm90LWEtbnVtYmVyIHZhbHVlIHRoYXQg d2lsbAogIGNvbnRhbWluYXRlIGFsbCBjb21wdXRhdGlvbnMgZG9uZSB3aXRoIGEsIGxlYWRpbmcg dG8gc2lsZW50bHkKICBjb3JydXB0ZWQgb3V0cHV0LgoKSW50ZXJtZWRpYXRlIGNhc2VzIGNhbiBi ZTogcmV0dXJuIGEgbm90LWEtbnVtYmVyIGJ1dCBzb21ldGhpbmcgbGF0ZXIKdGVzdHMgaXQgYW5k IGNyYXNoZXM7IG9yOiByZXR1cm4gbm90IGEgbnVtYmVyIGFuZCBiZSBsYXRlciBjb25kaXRpb25h bGx5CmRpc2NhcmRlZCB0byBwcm9kdWNlIGNvcnJ1cHQgb3V0cHV0IG9ubHkgb25jZSBpbiBhIHdo aWxlLiBGb3IgdGhlIHNha2UKb2Ygc2ltcGxpY2l0eSwgbGV0IHVzIGZvY3VzIG9uIHRoZSBleHRy ZW1lIGNhc2VzLgoKVGhlcmUgYXJlIHR3byB0aGluZ3MgdG8gc2F5IGhlcmU6CgotIGJvdGggYXJl IHZlcnkgYmFkOwoKLSBzaWxlbnRseSBjb3JydXB0aW5nIHRoZSBvdXRwdXQgaXMgdGhlIHdvcnN0 LgoKKFRoZXJlIGFyZSBsYW5ndWFnZXMgd2hlcmUgZGl2aXNpb24gYnkgemVybyBoYXMgYSBwcmVj aXNlIGFuZAptYXRoZW1hdGljYWxseSBjb25zaXN0ZW50IHNlbWFudGljIHRoYXQgYSB2ZXJ5IGNh cmVmdWwgcHJvZ3JhbW1lciBjb3VsZAptYWtlIHVzZSBvZi4gVGhhdCBkb2VzIG5vdCBpbnZhbGlk YXRlIG15IHBvaW50LikKCkJvdGggYXJlIGJhZDogdGhhdCBtZWFucyB0aGF0IHdoZW5ldmVyIHdl IHdyaXRlIGEgZGl2aXNpb24sIHdlIG11c3QgYmUKc3VyZSB0aGF0IHRoZSBkaXZpc29yIGlzIG5v dCB6ZXJvLiBTb21ldGltZXMsIGl0IGlzIHZlcnkgZWFzeToKCgl1bnNpZ25lZCBuID0gMDsKCWRv IHsgbisrOyB9IHdoaWxlICgqKHArKykpOwoJYSA9IGIgLyBuOwoKTG9vcHMgb2YgdGhlIGRv4oCm d2hpbGUga2luZCBhcmUgYWx3YXlzIGV4ZWN1dGVkIGF0IGxlYXN0IG9uY2UsIHRoZXJlZm9yZQp3 ZSBrbm93IHRoYXQgbiDiiaAgYXQgdGhlIGVuZC4gKERpZCB5b3Ugbm90aWNlIHRoZSBmbGF3IGlu IHRoYXQgcmVhc29uaW5nPwpJIHdpbGwgY29tZSBiYWNrIHRvIGl0IGxhdGVyLikKClNvbWV0aW1l cywgaXQgaXMganVzdCBhIG1hdHRlciBvZiB0ZXN0aW5nOgoKCWlmIChuYl9ub3RlcyA9PSAwKQoJ ICAgIGRpZSgiV2h5IGFyZSB5b3UgYXNraW5nIG1lIHRvIGNvbXB1dGUgYW4gYXZlcmFnZSB3aGVu IHlvdQoJICAgICAgICAgaGF2ZSBub3QgeWV0IGVudGVyZWQgYW55IG5vdGUsIHlvdSBpZGlvdD8i KTsKCkFuZCBzb21ldGltZXMgaXQgcmVsaWVzIG9uIGEgMTAtcGFnZXMgbWF0aGVtYXRpY2FsIHBy b29mIHRoYXQgdGhlCmFsZ29yaXRobSB3ZSBhcmUgaW1wbGVtZW50aW5nIGlzIGNvcnJlY3QuCgpC dXQgaGFyZCBvciBlYXN5LCBpdCBpcyBhbHdheXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBw cm9ncmFtbWVyIHRvCmtub3cgdGhhdCB0aGUgZGl2aXNvciBpcyBub3QgemVybyBiZWZvcmUgY29k aW5nIGEgZGl2aXNpb24uCgpUaGlzIGlzIG5vdCB1bmlxdWUgdG8gZGl2aXNpb25zOgoKV2UgbXVz dCBrbm93IGEgcG9pbnRlciBwb2ludHMgdG8gYSB2YWxpZCBvYmplY3QgYmVmb3JlIGRlcmVmZXJl bmNpbmcgaXQuCgpXZSBtdXN0IGtub3cgYSBwb2ludGVyIHBvaW50cyB0byB3cml0YWJsZSBtZW1v cnkgYmVmb3JlIHdyaXRpbmcgdG8gaXQuCgpXZSBtdXN0IGtub3cgYW4gaW5kZXggaXMgd2l0aGlu IHRoZSBib3VuZGFyaWVzIG9mIGFuIGFycmF5IGJlZm9yZQphY2Nlc3NpbmcgaXQuCgpBbmQgdGhp cyBpcyBub3QgbGltaXRlZCB0byBDIGFuZCBvdGhlciBwcm9ncmFtcyBGRm1wZWcgaXMgZm9uZCBv Zjogd3JpdGUKaW50byBhIGNlbGwgYmV5b25kIHRoZSBlbmQgb2YgdGhlIGFycmF5IGluIEMsIGl0 IHdpbGwgbGV0IHlvdSBtb2RpZnkKc29tZXRoaW5nIGVsc2UgZW50aXJlbHkgYW5kIHRoYXQgbWln aHQgbGV0IHRoZSBzcG9va3Mgb3IgY3J5cHRsb2NrZXJzCmluOyBidXQgZG8gaXQgaW4gSmF2YSBv ciBPQ2FtbCwgaXQgd2lsbCB0cmlnZ2VyIGFuIGV4Y2VwdGlvbiB0aGF0IHdlCnByb2JhYmx5IG5l Z2xlY3RlZCB0byBjYXRjaCwgYmVjYXVzZSBpZiB3ZSB0aG91Z2h0IG9mIGNhdGNoaW5nIGl0IHdl CndvdWxkIHByb2JhYmx5IGhhdmUgd3JpdHRlbiBpdCBtb3JlIGVsZWdhbnRseS4KClRoZSBjb25j bHVzaW9uIG9mIHRoaXMgc2VjdGlvbiBpcyB0aGlzOgoKQW55IHByb2dyYW1tZXIgd29ydGggdGhl aXIgc2FsdCBtdXN0IGtub3cgYSBsb3Qgb2YgaW52YXJpYW50cyBhYm91dCBlYWNoCmxpbmUgb2Yg dGhlaXIgY29kZSwgaW52YXJpYW50cyB0aGF0IGFyZSBub3Qgd3JpdHRlbiBpbnRvIHRoZSBjb2Rl IGJ1dAp0aGF0IHRoZXkgd291bGQgYmUgYWJsZSB0byBleHByZXNzIGFuZCBwcm92ZSBpZiBhc2tl ZCB0by4g4oCcQXQgdGhpcwpwb2ludCwgdGhpcyBudW1iZXIgaXMgbm90IHplcm/igJ07IOKAnGF0 IHRoaXMgcG9pbnQsIHRoaXMgcG9pbnRlciBjb21lcyBmcm9tCm1hbGxvYygpIG9yIHJlYWxsb2Mo KeKAnSwg4oCcYXQgdGhpcyBwb2ludCB0aGVyZSBhcmUgbm8gb3RoZXIgcmVmZXJlbmNlcyB0bwp0 aGlzIG9iamVjdOKAnSwg4oCcYXQgdGhpcyBwb2ludCB0aGlzIGJsb2NrIG9mIG1lbW9yeSBoYXMg YSAwIGJlZm9yZSB0aGUKZW5k4oCdIGFuZCBzbyBvbi4KCkZhaWx1cmUgdG8gYWNjb3VudCBmb3Ig dGhlIGludmFyaWFudHMgcmVxdWlyZWQgYnkgdGhlIGNvbnN0cnVjdHMgdXNlZCBpbgp0aGUgcHJv Z3JhbSB3aWxsIHJlc3VsdCBpbiB0aGUgcHJvZ3JhbSBtaXNiZWhhdmluZyBpbiBtb3JlIG9yIGxl c3MKaGFybWZ1bCB3YXlzLgoKCk5vdyBhYm91dCBmdW5jdGlvbiBjYWxscyBhbmQgQVBJLgoKQXMg SSBzYWlkLCBjb25zdHJ1Y3RzIGluIHRoZSBwcm9ncmFtIGhhdmUgaW52YXJpYW50IHJlcXVpcmVt ZW50czogaWYgd2UKZGl2aWRlLCBpdCBtdXN0IG5vdCBiZSBieSB6ZXJvLiBUaGVzZSByZXF1aXJl bWVudHMgcHJvcGFnYXRlIGJhY2t3YXJkcwphbG9uZyB0aGUgZmxvdyBvZiB0aGUgcHJvZ3JhbTog aWYgbCBtdXN0IG5vdCBiZSB6ZXJvLCB0aGVuIHRoZSBzdHJpbmcKaXQgaXMgdGhlIGxlbmd0aCBv ZiBtdXN0IG5vdCBiZSBlbXB0eSwgdGhlcmVmb3JlIHRoZSBsaXN0IGZyb20gd2hpY2ggaXQKaXMg YnVpbHQgbXVzdCBub3QgaXRzZWxmIGJlIGVtcHR5LCBhbmQgc28gb24uCgpBIHByb2dyYW0gYmVo YXZlcyBjb3JyZWN0bHkgaWYgYXQgYWxsIHBsYWNlcyBpbiB0aGUgY29kZSBmbG93LCB0aGUKaW52 YXJpYW50cyBndWFyYW50ZWVkIGJ5IHRoZSBlYXJsaWVyIHBhcnRzIGFyZSBhdCBsZWFzdCBhcyBz dHJpY3QgYXMgdGhlCmludmFyaWFudCByZXF1aXJlbWVudHMgaW1wb3NlIGJ5IHRoZSBsYXRlciBw YXJ0cy4KCkluIGEgY29tcGxldGUgcHJvZ3JhbSwgZnVuY3Rpb25zIGFyZSBqdXN0IHJvdWRhYm91 dHMgaW4gdGhlIHByb2dyYW0KZmxvdy4gQXMgc3VjaCwgbGlrZSBhbnkgcGxhY2UgaW4gdGhlIHBy b2dyYW0gdGhlcmUgYXJlIGludmFyaWFudApyZXF1aXJlbWVudHMuIEJ1dCBpZiB3ZSB0aGluayBv ZiBmdW5jdGlvbnMgYXMgc2VwYXJhdGluZyBkaWZmZXJlbnQgcGFydHMKb2YgYSBwcm9ncmFtIHRo YXQgYXJlIHVuZGVyIHRoZSByZXNwb25zaWJpbGl0eSBvZiBkaWZmZXJlbnQgcGVyc29uCihvciB0 aGUgc2FtZSBwZXJzb24gYXQgZGlmZmVyZW50IHRpbWVzKSwgdGhlc2VzIGludmFyaWFudHMgcmVx dWlyZW1lbnRzCm11c3QgYmUgZG9jdW1lbnRlZC4KClNvbWV0aW1lcywgaXQgaXMgdmVyeSBzdWJ0 bGU6IOKAnFRoZSBzdHJsZW4gZnVuY3Rpb24gY29tcHV0ZXMgdGhlIGxlbmd0aApvZiB0aGUgc3Ry aW5nIHBvaW50ZWQgdG8gYnkgc+KAnTogd2hlcmUgZG9lcyBpdCBzYXkgcyBtdXN0IG5vdCBiZSBh IE5VTEwKcG9pbnRlcj8gTm90IGV4cGxpY2l0bHksIGJ1dCBpdCBpcyBpbXBsaWVkIGJ5IOKAnHN0 cmluZyBwb2ludGVkIHRv4oCdLApiZWNhdXNlIE5VTEwgZG9lcyBub3QgcG9pbnQgdG8gYW55dGhp bmcsIGxldCBhbG9uZSBhIHN0cmluZy4KCldoYXQgaGFwcGVucyBpZiB3ZSBjYWxsIHN0cmxlbigp IG9uIGEgTlVMTCBwb2ludGVyPyBUaGF0IGRlcGVuZHMuIE9uClVuaXggc3lzdGVtcywgaXQgdXN1 YWxseSByZXN1bHRzIGluIGEgU0lHU0VHVjsgc29tZXRoaW5nIHNpbWlsYXIgd2lsbApoYXBwZW4g d2l0aCBvdGhlciBtZW1vcnktcHJvdGVjdGVkIE9TZXMuIEJ1dCBvbiBhIG1pY3JvY29udHJvbGxl ciwgaXQKd2lsbCBqdXN0IGNvbXB1dGUgaG93IG1hbnkgbm9uLTAgb2N0ZXRzIHRoZXJlIGFyZSBh dCB0aGlzIHBsYWNlIGluIHRoZQptZW1vcnkuIFdoYXRldmVyIHRoZSBlZmZlY3QsIGl0IG1pc2Jl aGF2ZXMuCgoKV2hhdCBhYm91dCBtaXN0YWtlcz8KCkV2ZW4gZXhjZWxsZW50IHByb2dyYW1tZXJz LCBwcm9ncmFtbWVycyB3b3J0aCByb3NlIEhpbWFsYXlhbiBzYWx0LCBjYW4KbWFrZSBtaXN0YWtl cy4gRm9yIGV4YW1wbGUsIGluIHRoZSBjb2RlIEkgZ2F2ZSBhYm92ZSBhcyBhbiBleGFtcGxlIHdo ZXJlCml0IGlzIGVhc3kgdG8gYmUgc3VyZSB0aGF0IG4gaXMgbm90IHplcm8sIHdoYXQgaGFwcGVu cyBvbiB4ODZfNjQgaWYgcApwb2ludHMgdG8gZm91ciBnaWdhLW9jdGV0cyBvZiBub24temVybyB2 YWx1ZXMgYW5kIHRoZW4gYSAwPyBPb3BzLgoKSW4gdGhlIGlkZWFsIHdvcmxkLCB0aGF0IHdvdWxk IGJlIGltcG9zc2libGUuIEluIHRoZSBpZGVhbCB3b3JsZCwgdGhlCmNvbXBpbGVyIHdvdWxkIHJl ZnVzZSB0byBjb21waWxlIGEgcHJvZ3JhbSB1bmxlc3MgaXQgY2FuIHByb3ZlIHRoZQpyZXF1aXJl ZCBpbnZhcmlhbnRzIGFyZSBtZXQsIHdpdGggdGhlIGhlbHAgb2YgYW5ub3RhdGlvbnMgaGVscGZ1 bGx5CnByb3ZpZGVkIGJ5IHRoZSBwcm9ncmFtbWVyLgoKVGhpcyBpcyB3aGF0IFJ1c3QgdHJpZWQg dG8gZG8gYW5kIGxhbWVudGFibHkgZmFpbGVkIGF0LgoKKFRoYXQgd291bGQgbGVhdmUgb3V0IHBy b2dyYW1zIHVzZWQgdG8gZXhwbG9yZSB1bnByb3ZhYmxlIG1hdGhlbWF0aWNhbApwcm9wZXJ0aWVz LiBJIGFtIHBlcmZlY3RseSBmaW5lIGxldHRpbmcgdGhlbSB1c2Ugc29tZSBraW5kIG9mCuKAnGln bm9yZS1pbnZhcmlhbnTigJ0gcHJhZ21hLCBhcyBsb25nIGFzIGl0IGlzIG5vdCB1c2VkIGluIGEg cHJvZ3JhbSB0aGF0Cm1pZ2h0IGNyYXNoIGEgc3BhY2UgcHJvYmUsIGV4cGxvZGUgYSBudWNsZWFy IHBsYW50IG9yLCB3b3JzZSwgbWFrZSBhCmdhbWUgdW53aW5uYWJsZS4pCgpJbiB0aGUgcmVhbCB3 b3JsZCwgd2UgYXJlIG5vdCB0aGVyZSB5ZXQsIGJ5IGZhci4gWWV0IHdlIG11c3QgZGVjaWRlIHdo YXQKdG8gZG8gYWJvdXQgYWxsIHRoZXNlIGludmFyaWFudHMuIEluIG1vc3Qgb2YgdGhlIHBsYWNl cywgd2UgZG8gbm90aGluZywKYmVjYXVzZSB0aGUgcm9hZCBpcyBzdHJhaWdodCBhbmQgaWYgd2Ug YXJlIHNwZWVkaW5nLCB0aGUgc3BlZWQgYnVtcCBhCmh1bmRyZWQgbWV0ZXJzIGZyb20gbm93IHdp bGwgdHJhc2ggdXMuIEJ1dCBpdCBpcyBzdGlsbCB1c2VmdWwgdG8gYWRkIG91cgpvd24gc3BlZWQg YnVtcHMgYW5kIHRyYWZmaWMgbGlnaHRzIGF0IHN0cmF0ZWdpYyBwbGFjZXMuCgpUaGUgd29yc3Qg dGhpbmcgd2UgY291bGQgZG8gaXMgcHVtcCB0aGUgYnJha2VzIGJlZm9yZSB0aGUgc3BlZWQgYnVt cC4gSXQKaXMgY2FsbGVkIOKAnGRlZmVuc2l2ZSBwcm9ncmFtbWluZ+KAnTog4oCcYXQgdGhpcyBw b2ludCwgdGhpcyB2YWx1ZSBzaG91bGQgbm90CmJlIG5lZ2F0aXZlLCBsZXQgdXMgY2hlY2sgaWYg aXQgaXMgYW5kIG1ha2UgaXQgMCBpZiBuZWNlc3NhcnksIHRoZSBzaG93Cm11c3QgZ28gb24h4oCd IFdlbGwsIGl0IGlzIG5vdCBhIHNob3csIGl0IGlzIGEgcHJvZ3JhbSBwcm9kdWNpbmcgYSByZXN1 bHQsCmFuZCBpZiBpdCBnb2VzIG9uIGFmdGVyIGJyZWFraW5nIG9uZSBvZiBpdHMgaW52YXJpYW50 IHJlcXVpcmVtZW50cyBpdAp3aWxsIGFsbW9zdCBjZXJ0YWlubHkgcHJvZHVjZSBpbnZhbGlkIHJl c3VsdC4gVGhhdCBpcyBldmlsLgoKCkJ1dCBkbyB3ZSBhZGQgdHJhZmZpYyBsaWdodHMgb3IgYSBz cGVlZCBidW1wPyBNeSB0cmFmZmljIGFuYWxvZ3kgYnJlYWtzCmRvd24sIEkgd2lsbCBzdG9wIHVz aW5nIGl0LiBEbyB3ZSBhZGQgZG8gbm90aGluZywgZG8gd2UgYW4gYXNzZXJ0IG9yIGRvCndlIHJl dHVybiBhbiBlcnJvcj8KCkJ1dCBmaXJzdCwgYSBzaG9ydCBwb2ludCBhYm91dCBhc3NlcnRzLiBM b2dpY2FsbHksIGFuIGFzc2VydCBhbmQgZG9pbmcKbm90aGluZyBhcmUgdGhlIHNhbWUsIGJlY2F1 c2UgYXNzZXJ0cyBhcmUgb2Z0ZW4gcmVtb3ZlZCBhdCBidWlsZCB0aW1lCihieSB0aGUgd2F5LCBJ IGhvcGUgYWxsIEZGbXBlZyBkZXZlbG9wZXJzIHJlbWVtYmVyIHRvIGFsd2F5cyB3b3JrIHdpdGgK dGhlIG1heGltdW0gYXNzZXJ0IGxldmVsKS4gQW5kIGJlY2F1c2Ug4oCcY3Jhc2hpbmcgcmlnaHQg bm934oCdIGlzIG9uZSBjYXNlCm9mIOKAnGFueXRoaW5nIGNhbiBoYXBwZW7igJ0uIEJ1dCBhc3Nl cnRzLCB3aGVuIHRoZXkgYXJlIGVuYWJsZWQsIG1ha2UKbWlzdGFrZXMgZWFzaWVyIHRvIGRlYnVn LCBiZWNhdXNlIHRoZXkgbWFrZSB0aGVpciBjb25zZXF1ZW5jZXMgbW9yZQp2aXNpYmxlIGVhcmxp ZXIuCgpTbzogZG8gbm90aGluZyAvIGFzc2VydCwgb3IgcmV0dXJuIGFuIGVycm9yPyBUaGlzIGlz IHRoZSBwb2ludCB3aGVyZQp0aGVyZSBpcyBubyBsb25nZXIgYW4gZWFzeSBhbnN3ZXIuIEl0IHJl cXVpcmVzIHdlaWdodGluZyB0aGUgcHJvcyBhbmQKdGhlIGNvbnMuIFRoZSBvbmx5IHRoaW5nIEkg Y2FuIGRvIGlzIG1ha2UgYSBsaXN0IG9mIGEgZmV3IGNvbnNpZGVyYXRpb25zCnRoYXQgYWZmZWN0 cyB0aGUgd2VpZ2h0aW5nIG9mIHRoZSBwcm9zIGFuZCBjb25zLgoKTW9zdGx5LCBJIHdpbGwgdGFs ayBhYm91dCBjb2RlIHdyYXBwZWQgaW5zaWRlIGEgZnVuY3Rpb24sIHdpdGggdGhlCmNhbGxlciBw b3NzaWJseSB1bmRlciB0aGUgcmVzcG9uc2liaWxpdHkgb2YgYSBkaWZmZXJlbnQgcHJvZ3JhbW1l ci4KCk9uZSBvZiB0aGUgbW9zdCBpbXBvcnRhbnQgb25lcyBpczogSXMgdGhlcmUgYWxyZWFkeSBh IGNoYW5uZWwgdG8gcmV0dXJuCmFuIGVycm9yPwoKSWYgdGhlIGNhbGxlciBpcyBhbHJlYWR5IGV4 cGVjdGVkIHRvIGNoZWNrIGZvciBhbiBlcnJvciByZXR1cm4gZHVlIHRvCmNvbmRpdGlvbnMgb3V0 c2lkZSBvZiB0aGUgY29udHJvbCBvZiBhbnkgcHJvZ3JhbW1lciAodGhlIGhhcmQgZHJpdmUKZGll ZCEpLCB0aGVuIHVzaW5nIGl0IHRvIHNpZ25hbCBhIHByb2dyYW1taW5nIGVycm9yIGlzIGFuIGVh c3kgb3B0aW9uLgpPbiB0aGUgb3RoZXIgaGFuZCwgaWYgdGhlIGZ1bmN0aW9uIGhhcyBiZWVuIG9m IHR5cGUgdm9pZCBmb3IgdGVuIHllYXJzLApjaGFuZ2luZyBpdCB0byByZXR1cm4gYW4gZXJyb3Ig bm93IGlzIGFsbW9zdCBjZXJ0YWlubHkgbm90IGEgZ29vZCBpZGVhLApiZWNhdXNlIGEgbG90IG9m IGNvZGUgYWxyZWFkeSBjYWxscyBpdCB3aXRob3V0IGNoZWNraW5nIGZvciBhbiBlcnJvci4KCkV2 ZW4gd29yc2UgaWYgdGhlIGZ1bmN0aW9uIHVzZWQgdG8gcmV0dXJuIGEgcG9zaXRpdmUgdmFsdWUg dGhhdCB3YXMgbm90CnN1cHBvc2VkIHRvIGJlIGFuIGVycm9yLCBhbmQgbm93IHdlIHdhbnQgdG8g cmV0dXJuIGFuIGVycm9yIHdpdGggYQpkaXN0aW5jdCBzZXQgb2YgdmFsdWUgKG5lZ2F0aXZlIEFW RVJST1IgY29kZSk6IHdlIGFyZSBpbiB0aGUg4oCcY2hlZXN5Cm5vdC1hLW51bWJlciB2YWx1ZeKA nSBjYXNlIGFuZCByaXNrIGNvbnRhbWluYXRpbmcgdGhlIG91dHB1dC4KCkFub3RoZXIgaW1wb3J0 YW50IG9uZSBpczogSG93IGVhc3kgaXMgaXQgdG8gZW5zdXJlIHRoZSByZXF1aXJlbWVudCBpcwpt ZXQ/CgrigJxQb2ludGVyIG11c3Qgbm90IGJlIG51bGzigJ0gaXMgb25lIG9mIHRoZSBlYXNpZXN0 IHRvIGVuc3VyZSwgYW5kIGFzIGEKY29uc2VxdWVuY2UgaXQgaXMgb25lIHRoYXQgaXMgdmVyeSBv ZnRlbiBjb21wbGV0ZWx5IG5lZ2xlY3RlZCwgcmVseWluZwpvbiB0aGUgT1Mgc2VuZGluZyBhIFNJ R1NFR1YuCgrigJxGbGFncyBtdXN0IGJlIGEgYmluYXJ5IE9SIG9mIHRoZSBmb2xsb3dpbmcgY29u c3RhbnRz4oCdIGlzIGFub3RoZXIgdmVyeQplYXN5IG9uZToganVzdCBkbyBub3QgZG8gYW55IGZh bmN5IGFyaXRobWV0aWMgd2l0aCB0aGUgdmFsdWUgdGhhdCB3aWxsCmVuZCB1cCBpbiB0aGUgZmxh Z3MuIElmIHdlIG9ubHkgdXNlIHRoZSBkZXNpZ25hdGVkIGNvbnN0YW50cyBhbmQgYmluYXJ5CmFy aXRobWV0aWMsIHdlIGFyZSBndWFyYW50ZWVkIHRvIGJlIGdvb2QuIElmIG5vdCwgd2hhdCBhcmUg d2UgZG9pbmcKZXhhY3RseT8KCk9uIHRoZSBvdGhlciBoYW5kLCDigJxleHByIG11c3QgcG9pbnQg dG8gYSBzdHJpbmcgd2l0aCBhIHN5bnRhY3RpY2FsbHkKdmFsaWQgZXhwcmVzc2lvbuKAnTogSSBj YW5ub3QgY2hlY2sgdGhlIHN5bnRheCBvZiBleHByIHdpdGhvdXQgZHVwbGljYXRpbmcKYSBsYXJn ZSBwYXJ0IG9mIHRoZSBjb2RlIEkgYW0gYWJvdXQgdG8gY2FsbCwgYW5kIHNvbWV0aW1lcyBJIG1p Z2h0IHdhbnQKdG8gdXNlIGFuIGV4cHJlc3Npb24gdGhhdCBjb21lcyBmcm9tIHRoZSBvdXRzaWRl LgoKVXNlZnVsIHJ1bGUgb2YgdGh1bWI6IFdoYXQgd291bGQgdGhlIEMgbGFuZ3VhZ2UgZG8/CgpX aGVuIHdyaXRpbmcgYSBuZXcgZnVuY3Rpb24sIHdlIGNhbiB0cnkgdG8gaW1hZ2luZSBob3cgaXQg d291bGQgd29yayBpZgp3YXMgYSBzdGFuZGFyZCBDIGZ1bmN0aW9uLCBhbmQgZm9yIHRoYXQgbG9v ayBhdCBzaW1pbGFyIGNhc2VzIGluIHRoZQpsaWJjLiBGb3IgZXhhbXBsZSwgbWFueSBtYW55IEMg ZnVuY3Rpb25zIHNheSDigJx1bmRlZmluZWQgYmVoYXZpb3LigJ0gaWYKTlVMTCBpcyBwYXNzZWQg d2hlcmUgTlVMTCBpcyBub3QgZXhwZWN0ZWQuIFdoZW5ldmVyIHRoZSBhbnN3ZXIgdG8g4oCcd2hh dAp3b3VsZCB0aGUgQyBsYW5ndWFnZSBkb+KAnSBjb250YWlucyB0aGUgd29yZHMg4oCcdW5kZWZp bmVkIGJlaGF2aW9y4oCdLCB0aGVuCnRoZSBiZXN0IGNob2ljZSBpcyB0byBkbyBub3RoaW5nLCBw b3NzaWJseSB3aXRoIGFuIGFzc2VydC4KClN5c3RlbSBjYWxscywgb24gdGhlIG90aGVyIGhhbmQs IGFyZSBub3QgYSB2ZXJ5IGdvb2QgcnVsZSBvZiB0aHVtYjogdGhleQphcmUgaGVhdmlseSBza2V3 ZWQgdG93YXJkcyDigJxldmVyeXRoaW5nIHJldHVybnMgYW4gZXJyb3IgY29kZSwgaXQgaXMgYQpn cmF2ZSBtaXN0YWtlIHRvIGlnbm9yZSBpdOKAnTsgdGhleSBhcmUgaGVhdmlseSBidXJkZW5lZCBi eSB0aGUgbmVlZCBmb3IKY29tcGF0aWJpbGl0eSB3aXRoIGV4aXN0aW5nIGNvZGUgYW5kIG90aGVy IHN5c3RlbXM7IGFuZCB0aGUgY29uc2VxdWVuY2VzCm9mIGRvaW5nIG5vdGhpbmcgYW5kIGp1c3Qg bGV0IHRoZSBkaWNlIGZhbGwgd291bGQgYmUgY2F0YXN0cm9waGljLgoKClRvIHN1bW1hcml6ZTog RGVjaWRpbmcgd2hhdCB0byBkbyB3aGVuIGludmFsaWQgdmFsdWVzIGFyZSBtZXQgcmVxdWlyZXMK cHJvcGVybHkgdW5kZXJzdGFuZGluZyB0aGUgaW52YXJpYW50IHJlcXVpcmVtZW50cyBvZiB0aGUg cHJvZ3JhbSBhbmQKZG9pbmcgYSBjb3N0LWFuYWx5c2lzIG9mIHRoZSBvcHRpb25zLCBpbmNsdWRp bmcgd2hldGhlciB0aGUgcmVzdCBvZiB0aGUKY29kZSBjYW4gZWFzaWx5IGVuZm9yY2UgdGhvc2Ug aW52YXJpYW50cyBhbmQgd2hldGhlciBpdCBjYW4gZG8gc29tZXRoaW5nCmdyYWNlZnVsIHdpdGgg YW4gZXJyb3IuCgpBZHZpY2UgYWRkcmVzc2VkIGFyZSBtb3JlIGJlZ2lubmVyIHByb2dyYW1tZXJz IHRlbmQgdG8gYmUgbW9yZQpvbmUtc2l6ZS1maXQtYWxsLCBhbmQgYXMgc3VjaCBpbmVmZmljaWVu dC4gQW5kIG9mdGVuIG1vcmUgZG9nbWF0aWMuIAoKUmVnYXJkcywKCi0tIAogIE5pY29sYXMgR2Vv cmdlCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmZmbXBl Zy1kZXZlbCBtYWlsaW5nIGxpc3QKZmZtcGVnLWRldmVsQGZmbXBlZy5vcmcKaHR0cHM6Ly9mZm1w ZWcub3JnL21haWxtYW4vbGlzdGluZm8vZmZtcGVnLWRldmVsCgpUbyB1bnN1YnNjcmliZSwgdmlz aXQgbGluayBhYm92ZSwgb3IgZW1haWwKZmZtcGVnLWRldmVsLXJlcXVlc3RAZmZtcGVnLm9yZyB3 aXRoIHN1YmplY3QgInVuc3Vic2NyaWJlIi4K