From mboxrd@z Thu Jan 1 00:00:00 1970 From: Smilen Dimitrov Subject: Re: Questions about virtual ALSA driver (dummy), PortAudio and full-duplex drops Date: Sun, 04 Aug 2013 02:05:10 +0200 Message-ID: <51FD9AB6.4050408@imi.aau.dk> References: <51EF41C8.2040701@imi.aau.dk> <201307241403.28873.gineera@aspect135.co.uk> <51F07150.1060004@imi.aau.dk> <51F0E3C5.4020400@ladisch.de> Reply-To: Portaudio Mailing List Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <51F0E3C5.4020400@ladisch.de> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: portaudio-bounces@music.columbia.edu Sender: portaudio-bounces@music.columbia.edu To: alsa-devel@alsa-project.org Cc: portaudio@music.columbia.edu, Clemens Ladisch List-Id: alsa-devel@alsa-project.org SGkgQ2xlbWVucywgCgpNYW55IHRoYW5rcyBmb3IgeW91ciByZXBseSAtIGFuZCBhcG9sb2dpZXMg aXQgdG9vayBtZSBhIHdoaWxlIHRvIHdyaXRlIGJhY2sgKGFuZCBmb3IgYSBsb25naXNoIGVtYWls IGFnYWluKS4gU2luY2UgcmVhZGluZyB5b3VyIHJlcGx5LCBJJ3ZlIHNwZW50IG1vc3Qgb2YgbXkg dGltZSBjb2RpbmcgYSBuZXcgdGVzdCBjYXNlIGZvciBkaXNjdXNzaW9uLCBub3cgcG9zdGVkIGhl cmUgKHNlZSBSZWFkbWUgZm9yIG1vcmUpOgoKICAgIGh0dHA6Ly9zZGFhdWJja3Auc291cmNlZm9y Z2UubmV0L3Bvc3QvYWxzYS1jYXB0dGVzdC8KICAgIGh0dHA6Ly9zZGFhdWJja3Auc291cmNlZm9y Z2UubmV0L3Bvc3QvYWxzYS1jYXB0dGVzdC9SZWFkbWUKCkkgdG9vayB0aGUgcHJldmlvdXMgYWR2 aWNlOyBhbmQgdGhpcyBpcyBhbiBBTFNBLW9ubHkgKGFuZCBjYXB0dXJlIG9ubHksIHRvIGtlZXAg aW4gc2ltcGxlKSB0ZXN0LCB0cnlpbmcgdG8gZXhwbG9yZSB3aGF0IGhhcHBlbnMgd2hlbiB0d28g YHNuZF9wY21fcmVhZGlgIGNvbW1hbmRzOgoKICAgIHJldDEgPSBzbmRfcGNtX3JlYWRpKGNhcHR1 cmVfcGNtX2hhbmRsZSwgYXVkaW9idWYsIHBlcmlvZF8zMl9mcmFtZXMpOwogICAgcmV0MiA9IHNu ZF9wY21fcmVhZGkoY2FwdHVyZV9wY21faGFuZGxlLCBhdWRpb2J1ZiwgcGVyaW9kXzMyX2ZyYW1l cyk7CgouLi4gYXJlIHJhbiBpbiBzdWNjZXNzaW9uLCBmb3IgNDQxMDBIei8xNmIvc3RlcmVvICh3 aXRoIHBlcmlvZF9zaXplPTMyIGFuZCBidWZmZXJfc2l6ZT02NCBmcmFtZXMsIHJlc3VsdGluZyB3 aXRoIHBlcmlvZCB0aW1lIG9mIDcyNS42IG1pY3Jvc2Vjb25kcykgaW4gdHdvIGNvbnRleHRzOiAx KSB3aXRoIG15IG9uYm9hcmQgUENJICdzbmRfaGRhX2ludGVsJyBjYXJkOyBhbmQgMikgd2l0aCB0 aGUgdmlydHVhbCAnc25kX2R1bW15JyBkcml2ZXIuIEhvcGVmdWxseSBpdCB3aWxsIGhlbHAgbWUg Z2V0IHNvbWUgcXVlc3Rpb25zIEkgaGF2ZSBjbGFyaWZpZWQgLSBhbmQgZXZlbnR1YWxseSByZXN1 bHQgd2l0aCBhIHZpcnR1YWwgQUxTQSBkcml2ZXIsIHRoYXQgZG9lcyBub3QgdHJpZ2dlciB0aGUg ZnVsbC1kdXBsZXggZHJvcCBpbiBQb3J0QXVkaW8uCgpPbiAyMDEzLTA3LTI1IDEwOjM3LCBDbGVt ZW5zIExhZGlzY2ggd3JvdGU6Cj4+PiBbLi4uXSBhbmQgeW91IGFyZSBub3QgY29ycmVjdGx5Cj4+ PiByZXBvcnRpbmcgdGhlIG51bWJlciBvZiBzYW1wbGVzIHRyYW5zZmVycmVkIHRvIHRoZSBoYXJk d2FyZT8KPiA+Cj4+IEkgYWdyZWUgdGhhdCBpdCBtdXN0IGJlIHRoZSBjb3JlIG9mIHRoZSBwcm9i bGVtIC0gYnV0IEkgaGF2ZSBwcm9ibGVtCj4+IHVuZGVyc3RhbmRpbmcgd2h5LCBnaXZlbiBJIGN1 cnJlbnRseSBwZXJjZWl2ZSB0aGF0IEknbSBkb2luZwo+PiBldmVyeXRoaW5nIHJpZ2h0OiBJIGtu b3cgSSBoYXZlIGEgcmF0ZSBvZiA0NDEwMCBmcmFtZXMgcGVyIHNlY29uZDsgSQo+PiBjaG9vc2Ug ZWl0aGVyIGEgcGVyaW9kIGZvciB0aW1lciBmdW5jdGlvbnMsIGFuZCBjYWxjdWxhdGUgYnl0ZXMg cGVyCj4+IHBlcmlvZCB0byBtYXRjaCB0aGUgcmF0ZSwgb3IgdmljZSB2ZXJzYTsgYW5kIGluIGVh Y2ggcGVyaW9kLCBJCj4+IGluY3JlYXNlIHN0cmVhbSBidWZmZXIgcG9zaXRpb25zIGZvciB0aGF0 IGJ5dGVzIHBlciBwZXJpb2QgYW1vdW50Cj4+ICh0YWtpbmcgY2FyZSBvZiBidWZmZXIgd3JhcHBp bmcpLgo+Cj4gWW91ciBkcml2ZXIncyAucG9pbnRlciBjYWxsYmFjayBtdXN0IHJlcG9ydCB0aGUg KmFjdHVhbCogcG9zaXRpb24gYXQKPiB3aGljaCB0aGUgaGFyZHdhcmUgaGFzIGZpbmlzaGVkIHJl YWRpbmcgZnJvbSB0aGUgYnVmZmVyLiAgWW91ICptdXN0Kgo+IHJlYWQgc29tZSBoYXJkd2FyZSBy ZWdpc3RlciBvZiB5b3VyIERNQSBjb250cm9sbGVyIGZvciB0aGlzLgoKCkkgdW5kZXJzdGFuZCB0 aGlzIC0gYW5kIGFncmVlIHdpdGggaXQsIGlmIEkgaGFkIHN1Y2ggYSBjYXNlIGNhc2UsIHdoZXJl IG15IGRyaXZlciB3b3VsZCB0YWxrIHRvIGFuIGFjdHVhbCBoYXJkd2FyZSBjYXJkLiBIb3dldmVy LCBzaW5jZSBoZXJlIEknbSBpbnRlcmVzdGVkIGluIHRoZSBvcGVyYXRpb24gb2YgYSB2aXJ0dWFs IChwbGF0Zm9ybSkgZHJpdmVyLCB3aGljaCB0YWxrcyB0byBfbm9fIHNvdW5kY2FyZCBoYXJkd2Fy ZSAtIGhvdyBjb3VsZCBJIHBvc3NpYmx5IHJlYWQgYSBoYXJkd2FyZSByZWdpc3RlciwgcmVsYXRl ZCB0byBhIGNhcmQgdGhhdCBkb2Vzbid0IGV4aXN0PyAoTWF5YmUgaXQncyB0aGUgIi4uLnRyYW5z ZmVycmVkIHRvIHRoZSBoYXJkd2FyZS4uLiIgbWVudGlvbiBhdCB0aGUgc3RhcnQgb2YgdGhlIHF1 b3RlLCB0aGF0IGdhdmUgdGhlIHdyb25nIGltcHJlc3Npb24gb2YgbXkgZm9jdXMgaW4gdGhpcyBj YXNlPyBNeSBzdGF0ZW1lbnQgaW4gdGhlIHF1b3RlLCByZWZlcnMgdG8gd2hhdCBJJ20gdHJ5aW5n IHRvIGRvIHdpdGggdGhlIF92aXJ0dWFsXyAiZHVtbXkiIGRyaXZlci4pCgpBbnl3YXlzLCBub3cg dGhhdCBpdCdzIG1lbnRpb25lZCwgSSB3YW50ZWQgdG8gbWFrZSBzdXJlIEkndmUgdW5kZXJzdG9v ZCB0aGUgcmVwb3J0aW5nIG9mIHRoZSBhY3R1YWwgcG9zaXRpb24gYXQgIndoaWNoIHRoZSBoYXJk d2FyZSBoYXMgZmluaXNoZWQgcmVhZGluZyBmcm9tIHRoZSBidWZmZXIiIGNvbmNlcHR1YWxseSwg aW4gY29udGV4dCBvZiBhY3R1YWwgc291bmRjYXJkIGhhcmR3YXJlIC0gc28gaGVyZSBpcyBhIGRp YWdyYW0gYmFzZWQgb24gbXkgb25ib2FyZCBQQ0kgJ2hkYS1pbnRlbCcgY2FyZCAocmVwbGFjZSAi LnBuZyIgd2l0aCAiLnBkZiIgaW4gbGluaywgdG8gZ2V0IGEgdGV4dC1zZWFyY2hhYmxlIFBERiB2 ZXJzaW9uKToKCiAgICBodHRwOi8vc2RhYXViY2twLnNvdXJjZWZvcmdlLm5ldC9wb3N0L2Fsc2Et Y2FwdHRlc3QvbW9udGFnZS1oZGEtaW50ZWwucG5nCgpIZXJlJ3Mgd2hhdCBJJ20gdHJ5aW5nIHRv IHNob3cgb24gaXQ6IEknbSBhc3N1bWluZyB0aGF0IHRoZSBjYXJkIGhhcyBpdCdzIG93biBpbnRl cm4gY2FwdHVyZSBidWZmZXIgbWVtb3J5IG9uIGJvYXJkOyBhbmQgQUxTQSAodGhlIGhkYV9pbnRl bCBkcml2ZXIsIGFjdHVhbGx5KSBtYW5hZ2VzIHRoZSBlcXVpdmFsZW50IG9mIGBzdWJzdHJlYW0t PnJ1bnRpbWUtPmRtYV9hcmVhYCAodGhlIGhkYV9pbnRlbCBkcml2ZXIgYWN0dWFsbHkgbWFuYWdl cyBpdCdzIG93biBgYXJlYWAgcG9pbnRlciwgYXMgcGFydCBvZiBhIGBjaGlwYCBzdHJ1Y3R1cmUp IGFzIGNhcHR1cmUgYnVmZmVyIG1lbW9yeSBpbiBSQU0uIFRoZSBtYWluIHB1cnBvc2Ugb2YgdGhl IEFMU0EgZHJpdmVyLCB0aGVuLCBpcyB0byBtYW5hZ2UgdGhlIGNvcHlpbmcgdGhlIGRhdGEgZnJv bSB0aGUgaW50ZXJuIGNhcmQgY2FwdHVyZSBidWZmZXIsIHRvIHRoZSBgZG1hX2FyZWFgIGNhcHR1 cmUgYnVmZmVyIGluIFJBTSBvZiB0aGUgUEM7IG9uY2UgdGhlIGRhdGEgaXMgaW4gdGhlIGBkbWFf YXJlYWAsIHRoZSByZXN0IG9mIHRoZSBBTFNBIGVuZ2luZSB3aWxsIG1ha2Ugc3VyZSB0aGF0IGRh dGEgZW5kcyB1cCBpbiBgYXVkaW9idWZgIGluIHVzZXItc3BhY2UsIHVwb24gYSBjYWxsIHRvIGBz bmRfcGNtX3JlYWRpYCBhcyBnaXZlbiBhYm92ZS4KCldoYXQgaXMgaW50ZW5kZWQgdG8gYmUgc2hv d24sIGlzOiB0aGUgY2FyZCBzdGFydHMgZmlsbGluZyBpdHMgaW50ZXJuIGNhcHR1cmUgYnVmZmVy LCBzb29uIGFmdGVyIGBzbmRfcGNtX3N0YXJ0YDsgc2luY2UgdGhlIHBlcmlvZCBpcyBzZXQgdG8g MzIgZnJhbWVzLCB3aGVuIHRoZSBjYXJkIHJlYWNoZXMgdGhpcyBib3VuZGFyeSBpbiBpdHMgYnVm ZmVyLCBpdCBnZW5lcmF0ZXMgYW4gaW50ZXJydXB0ICgiQ2FyZElSUT8iKTsgdGhlIGtlcm5lbCBy ZWFjdHMgdG8gdGhpcyBieSBoYW5kbGluZyB0aGlzIGhhcmR3YXJlIGludGVycnVwdCwgYnkgZXZl bnR1YWxseSBjYWxsaW5nIHRoZSBgYXp4X2ludGVycnVwdCgpYCBoYW5kbGVyIG9mIHRoZSBoZGEt aW50ZWwgZHJpdmVyLiBbW1t+IE9idmlvdXNseSwgSSBjYW5ub3QgbWVhc3VyZSB0aGUgYWN0dWFs IGludGVycnVwdHMgZ2VuZXJhdGVkIGJ5IHRoZSBjYXJkLCBzbyB0aGUgIkNhcmRJUlE/IiBwb3Np dGlvbnMgYXJlIGludGVycG9sYXRlZCAtIGJhc2VkIG9uIHJlcG9ydGVkIGtlcm5lbCBpbnRlcnJ1 cHQgZW50cmllcywgYnV0IG9ubHkgd2hlcmUgdGhlIGBhenhfaW50ZXJydXB0YCBoYW5kbGVyIGhh cyBiZWVuIGNhbGxlZCAoc2luY2UgaXQncyBhbHNvIHBvc3NpYmxlIHRvIGNhcHR1cmUgaW50ZXJy dXB0IGVudHJpZXMgZm9yIHBvd2VyLCBmb3IgaW5zdGFuY2UpOyB0aGUgc2hvd24gZmlsbGluZyBv ZiB0aGUgYnVmZmVyIGlzIHRoZW4gaW50ZXJwb2xhdGVkIGJhc2VkIG9uIHRoaXMuIH5dXV0KCk9u IHRoZSBQQyBzaWRlLCB0aGUgZHJpdmVyJ3MgLnBvaW50ZXIgY2FsbGJhY2sgY2FuIGJlIHRyaWdn ZXJlZCBib3RoIGJ5IHVzZXJzcGFjZSBjYWxsIHRvIGBzbmRfcGNtX3JlYWRpYCwgYW5kIChhcHBh cmVudGx5KSBpbmRlcGVuZGVudGx5IG9mIGl0IC0gYnV0IChzdXJwcmlzaW5nIGZvciBtZSkgaXQg aXMgbm90IG5lY2Vzc2FyaWx5IHBlcmlvZGljISBUaGUgYGRtYV9hcmVhYCBmaWxsaW5nIHNob3du IGlzIGJhc2VkIG9uIGFjdHVhbCBwb3NpdGlvbiByZXR1cm5lZCBieSB0aGUgLnBvaW50ZXIgY2Fs bGJhY2sgKGFzIG11Y2ggYXMgc3BhY2UgYWxsb3dzKS4gTG9va2luZyBmcm9tIGEgZGlzdGFuY2Us IGl0IGxvb2tzIGxpa2UgdGhlIC5wb2ludGVyIHBvc2l0aW9uIHJldHVybmVkLCBzZWVtcyB0byB0 cmFjayB3ZWxsIHRoZSAoaWRlYWxpemVkKSBmaWxsaW5nIG9mIHRoZSBpbnRlcm4gY2FwdHVyZSBi dWZmZXIuIFtbW34gaG93ZXZlciwgdGhpcyBtYXkgYWxzbyBiZSBkdWUgdG8gdGhlIC5wb2ludGVy IGNhbGxiYWNrIChgYXp4X3BjbV9wb2ludGVyKClgKSBiZWluZyBvY2Nhc2lvbmFsbHkgY2FsbGVk IGluIHF1aWNrIHN1Y2Nlc3Npb24gKGFwcGFyZW50bHkgaW4gY29udGV4dCBvZiBgc25kX3BjbV9j YXB0dXJlX2lvY3RsKClgIGZ1bmN0aW9uKS4gfl1dXQoKSXMgdGhlIGFib3ZlIHVuZGVyc3Rvb2Qg Y29ycmVjdGx5PyBBbmQgZG9lcyB0aGUgb2JzZXJ2YXRpb24sIHRoYXQgKGFwcGFyZW50bHkpOgoq IHRoZSAiZmlsbGluZyIgb2YgYGRtYV9hcmVhYCBidWZmZXIgb24gdGhlIFBDIHNpZGUgInRyYWNr cyB3ZWxsIiB0aGUgImZpbGxpbmciIG9mIHRoZSBpbnRlcm4gY2FwdHVyZSBidWZmZXIgb24gdGhl IGNhcmQgc2lkZTsKLi4uIGlsbHVzdHJhdGUgdGhlIG5hdHVyZSBvZiAucG9pbnRlciAicmVwb3J0 aW5nIG9mIHRoZSBhY3R1YWwgcG9zaXRpb24gYXQgd2hpY2ggdGhlIGhhcmR3YXJlIGhhcyBmaW5p c2hlZCByZWFkaW5nIGZyb20gdGhlIGJ1ZmZlciIgY29ycmVjdGx5PwoKCj4gSXQgaXMgbm90Cj4g cG9zc2libGUgdG8gZGVkdWNlIHRoaXMgZnJvbSB0aGUgY3VycmVudCB0aW1lIGJlY2F1c2UgdGhl IGNsb2NrcyBkbyBub3QKPiBydW4gYXQgdGhlIHNhbWUgc3BlZWQsIGFuZCBhbnkga2luZCBvZiBi dWZmZXJpbmcgd2lsbCBpbnRyb2R1Y2UgbW9yZQo+IGVycm9ycy4KClRoYW5rcyBmb3IgbWVudGlv bmluZyB0aGlzIC0gSSBoYWQgb3RoZXJ3aXNlIGNvbXBsZXRlbHkgZm9yZ290dGVuIGFib3V0IGNs b2NrIGRvbWFpbnM7IHNvIHRoaXMgd2FzIHRoZSBjb21tZW50IHRoYXQgZ290IG1lIHdvcmtpbmcg b24gdGhpcyB0ZXN0IHJvdW5kISBGaXJzdCwgSSdkIGxpa2UgdG8gbWFrZSBzdXJlIEkgdW5kZXJz dGFuZCAidGhlIGNsb2NrcyBkbyBub3QgcnVuIGF0IHRoZSBzYW1lIHNwZWVkIiBwcm9wZXJseToK CkluIHRoZSBgbW9udGFnZS1oZGEtaW50ZWwucG5nYCBkaWFncmFtIGFib3ZlLCB0aGVyZSBhcmUg dGhyZWUgdGltZSBheGVzLCBzaG93biB2ZXJ0aWNhbGx5LiBJdCBpcyBhc3N1bWVkIHRoYXQgdGhl IGNhcmQgaGFyZHdhcmUgaGFzIGl0cyBvd24gc2VwYXJhdGUgY3J5c3RhbCBvc2NpbGxhdG9yIChY T2NhcmQpLCBpbiBhZGRpdGlvbiB0byB0aGUgUEMgaGF2aW5nIGl0cyBvd24gY3J5c3RhbCAoWE9w YykgLSBhcyBjbG9jayBzb3VyY2VzOyBjb25zZXF1ZW50bHksIHRoZXkgaGF2ZSB0aGVpciBzZXBh cmF0ZSB0aW1lIGF4ZXMgIihDYXJkKSBUaW1lIiBhbmQgIihQQykgVGltZSIsIGdpdmVuIHRoZXJl IHdpbGwgYWx3YXlzIGJlIHNvbWUgbWlzbWF0Y2ggYmV0d2VlbiB0aGUgZnJlcXVlbmNpZXMgdGhl eSBnZW5lcmF0ZS4gVGhlIGxlZnRtb3N0IGF4aXMgaXMgd2hhdCBJJ3ZlIGNhbGxlZCAiKFJlYWwp IHRpbWUiLCBhbmQgaXMgdXNlZCBmb3Igbm8gb3RoZXIgcmVhc29uLCB0aGFuIGJlaW5nIGEgcmVt aW5kZXI7IEkgZ3Vlc3MgaXQgd291bGQgcmVwcmVzZW50IHRoZSBjbG9jayBvZiBhbiAiaW5kZXBl bmRlbnQgb2JzZXJ2ZXIiLCBvciB0aGUgImRldmVsb3BlciBjbG9jayIgLSBvciB0aGUgImdsb2Jh bCBkYXRlICYgdGltZSBjbG9jayIgKHN1Y2ggYXMgcmV0cmlldmVkIGJ5IGBudHBkYXRlYCkuIEJ5 IHRoZSB3YXksIHdoZW4gSSBzZWUgIndhbGwgY2xvY2siIHJlZmVycmVkIHRvIGluIGNvZGUsIGRv ZXMgdGhhdCByZWZlciB0byB0aGlzLCB3aGljaCBJJ3ZlIGNhbGxlZCAiUmVhbCBUaW1lIj8KClRo ZSBkaWFncmFtIHRha2VzIHRoZSAiKFJlYWwpIFRpbWUiIGF4aXMgdG8gaGF2ZSBhIHRpbWUgdW5p dCA9PSAxOyB0aGUgIihDYXJkKSBUaW1lIiBpcyBzZXQgdG8gaGF2ZSBhIDEuNSUgc21hbGxlciAo ZmFzdGVyKSB1bml0IHRoYW4gMTsgYW5kIHRoZSAiKFBDKSBUaW1lIiBpcyBzZXQgdG8gaGF2ZSBh IDEuNSUgbGFyZ2VyIChzbG93ZXIpIHVuaXQgdGhhbiAxLiBUaGUgdmFsdWUgb2YgMS41JSBpcyBj aG9zZW4gYXJiaXRyYXJpbHksIHNvIHRoZSBtaXNtYXRjaCBpcyBtb3JlIG9idmlvdXNseSB2aXNp YmxlIHRocm91Z2ggdGhlIGRpYWdyYW0gYXhlcycgdGlja3MuIERvZXMgdGhpcyBpbGx1c3RyYXRl IHRoZSBuYXR1cmUgb2YgInRoZSBjbG9ja3MgZG8gbm90IHJ1biBhdCB0aGUgc2FtZSBzcGVlZCIg cHJvcGVybHkgKGluIGdlbmVyYWwpPwoKQW55d2F5cyAtIEkgZG8gdW5kZXJzdGFuZCB0aGUgaW1w b3NzaWJpbGl0eSBvZiBkZWR1Y3Rpb24gb2YgdGhlIChYT2NhcmQpIHRpbWluZywgYmFzZWQgc29s ZWx5IG9uIGFsZ29yaXRobXMgcnVubmluZyBvbiAoWE9wYykgdGltaW5nLiBBbmQgSSBhZ3JlZSBp dCB3b3VsZCBoYXZlIGJlZW4gYSBwcm9ibGVtLCBpZiBJIHdhcyBpbiBhIGNvbnRleHQgb2Ygd29y a2luZyB3aXRoIGFjdHVhbCBzb3VuZGNhcmQgaGFyZHdhcmUuCgpIb3dldmVyLCBzaW5jZSBJJ20g aW5xdWlyaW5nIGFib3V0IGEgdmlydHVhbCBkcml2ZXIgLSB0aGVyZSBpcyBubyBhY3R1YWwgY2Fy ZCBoYXJkd2FyZSwgYW5kIGNvbnNlcXVlbnRseSBubyBhY3R1YWwgKFhvY2FyZCkgY3J5c3RhbCBv c2NpbGxhdG9yL2Nsb2NrOyBhcyB5b3UndmUgbm90ZWQ6CgoKPgo+IFRoZSBkdW1teSBkcml2ZXIg dXNlcyBhIHRpbWVyIGJlY2F1c2UgdGhlcmUgaXMgbm8gYWN0dWFsIGhhcmR3YXJlLgo+CgpSaWdo dCAtIEkgaGF2ZSB0cmllZCB0byB2aXN1YWxpc2UgdGhpcyBvbiB0aGUgZGlhZ3JhbSBiZWxvdyAo YWdhaW4sIHJlcGxhY2UgYC5wbmdgIHdpdGggYC5wZGZgIGZvciBhIFBERiB2ZXJzaW9uKToKCiAg ICBodHRwOi8vc2RhYXViY2twLnNvdXJjZWZvcmdlLm5ldC9wb3N0L2Fsc2EtY2FwdHRlc3QvbW9u dGFnZS1kdW1teS5wbmcKClRoYXQgZGlhZ3JhbSBzaG91bGQgY2xlYXJseSBzaG93LCB0aGF0IGlu IGEgY29udGV4dCBvZiBhIHZpcnR1YWwgKHBsYXRmb3JtKSAiZHVtbXkiIGRyaXZlciwgdGhlcmUg aXMgbm8gYWN0dWFsIGNhcmQgaGFyZHdhcmUgdGFyZ2V0dGVkIC0gbm9yIGEgY29ycmVzcG9uZGlu ZyBvc2NpbGxhdG9yICh3aXRoIGEgY29ycmVzcG9uZGluZyBpbmRlcGVuZGVudCBjbG9jayBkb21h aW4pLiBUaGUgbGFyZ2UgcmVkIGFycm93cywgdGhhdCB1c2VkIHRvIGluZGljYXRlIHRoZSBoYXJk d2FyZSBJUlEgaW4gdGhlIGBoZGEtaW50ZWxgIGRpYWdyYW0sIG5vdyBpbmRpY2F0ZSB0aGUgdGlt ZXIgZnVuY3Rpb25zIHNvZnRpcnEgZW50cnkgLSBhbmQgc2luY2UgdGhleSBvcmlnaW5hdGUgZnJv bSB0aGUgQ1BVIGl0c2VsZiwgdGhleSBub3cgcG9pbnQgZnJvbSB0aGUgb3RoZXIgc2lkZSAobm90 ZSBhbHNvIEknbSByZXVzaW5nIHRoZSAiQ2FyZElSUT8iIGVuZ2luZSwgdG8gYWxzbyByZW5kZXIg dGhlc2UgaW50ZXJydXB0IGVudHJpZXMgb24gdGhlIGNhcmQgYXhpcywgdW5kZXIgdGhlIGNyb3Nz LW91dCkuIFRoZXJlIGlzIG9ubHkgb25lIGJ1ZmZlciAoYGRtYV9hcmVhYCdzKSBmaWxsaW5nIHNo b3duIC0gYW5kIGFzIHRoZXJlIGlzIG5vIGludGVybiBjYXJkIGJ1ZmZlciBub3csIHRoZXJlIGlz IG5vdGhpbmcgdG8gY29tcGFyZSB0aGlzIGBkbWFfYXJlYWAncyBmaWxsaW5nIHByb2Nlc3MgdG87 IHRoZSBmaWxsaW5nIHNob3duIGlzIGJhc2VkIHNvbGVseSBvbiB3aGF0IHRoZSAucG9pbnRlciBj YWxsYmFjayByZXR1cm5zLgoKQW5kIGhlcmVpbiBsaWVzIHRoZSBjcnV4IG9mIG15IGlucXVpZXJ5 OiBnaXZlbiB0aGVyZSBpcyBubyBoYXJkd2FyZSB0YXJnZXR0ZWQgd2l0aCBhIHZpcnR1YWwgZHJp dmVyLCBJIGNhbiBpbiBwcmluY2lwbGUgcmV0dXJuIHdoYXRldmVyIEkgd2FudCBhcyBhIC5wb2lu dGVyIHBvc2l0aW9uLiBMb2dpYyB3b3VsZCBzYXkgdGhhdCB0aGUgdmFsdWUgcmV0dXJuZWQgZnJv bSBwb2ludGVyLCBzaG91bGQgaW5jcmVhc2UgKGluIHRoaXMgY2FzZSkgYnkgMzIgKGZyYW1lcykg ZWFjaCBQQ00gcGVyaW9kICg3MjYgbWljcm9zZWNvbmRzKSAtIGFuZCBpdCBpcyB3aXRoIHRoaXMg aW4gbWluZCwgdGhhdCB0aGUgdGltZXIgZnVuY3Rpb25zIGFyZSByYW4gaW4gdGhlIGR1bW15IGRy aXZlci4gVXNlcnNwYWNlLCBpbiBwcmluY2lwbGUsIGRlYWxzIG9ubHkgd2l0aCB0aGlzIGxheWVy IG9mIGluZm9ybWF0aW9uIC0gc28gSSBzaG91bGQgYmUgYWJsZSB0byBzaW11bGF0ZSBhIHByb3Bl ciBvcGVyYXRpb24gdG8gdXNlcnNwYWNlLCBqdXN0IGJ5IGluY3JlYXNpbmcgdGhpcyAucG9pbnRl ciB2YWx1ZSBwcm9wZXJseS4gSG93ZXZlciwgZXZlbiBpZiBJIGRvIHRoYXQsIEkgc3RpbGwgbWFu YWdlIHRvIHNvbWVob3cgdHJpZ2dlciBhIGZ1bGwtZHVwbGV4IGRyb3AgaW4gdGhlIFBvcnRBdWRp byB1c2Vyc3BhY2UgbGF5ZXIgLSBhbmQgdGhhdCBtZWFucywgSSdtIHN0aWxsIGdvaW5nIHdyb25n IHNvbWV3aGVyZSB3aXRoIHRoZSAucG9pbnRlciBwb3NpdGlvbiBjYWxjdWxhdGlvbiwgZXZlbiBp ZiBJIGJlbGlldmUgSSdtIGRvaW5nIGl0IHJpZ2h0LgoKVGhlIGZ1bGwtZHVwbGV4IHBhcnQsIG9m IGNvdXJzZSwgaXMgbm90IGhhbmRsZWQgaW4gdGhpcyB0ZXN0LCBiZWluZyBjYXB0dXJlIG9ubHk7 IGhvd2V2ZXIsIEkgY2FuIG5vdGljZSBzb21lIHRoaW5ncywgdGhhdCBtYXkgZXZlbnR1YWxseSBo YXZlIGFuIGluZmx1ZW5jZToKCiogVGhlIC5wb2ludGVyIGNhbGxiYWNrIGNhbiBiZSBjYWxsZWQg aW4gcXVpY2sgc3VjY2Vzc2lvbiwgaW4gY29udGV4dCBvZiBgc25kX3BjbV9jYXB0dXJlX2lvY3Rs YCwgd2l0aCBib3RoIGBkdW1teWAgYW5kIGBoZGEtaW50ZWxgIGRyaXZlcnMuCiogSW4gYm90aCBj YXNlcywgcmlnaHQgYWZ0ZXIgYHNuZF9wY21fc3RhcnRgIGlzIGNhbGxlZCwgLnBvaW50ZXIgaXMg Y2FsbGVkLCByZXR1cm5pbmcgemVybywgQlVUOgoqKiB3aXRoIGBoZGEtaW50ZWxgIGRyaXZlciwg dGhlIGNhcmQgaW1tZWRpYXRlbHkgcmFpc2VzIGFuIGludGVycnVwdCBoZXJlIC0gbWFraW5nIGZv ciBhIHRvdGFsIG9mIDMgaW50ZXJydXB0cyBpbiBhIDJtcyBjYXB0dXJlOwoqKiB3aXRoIGBkdW1t eWAgZHJpdmVyLCB0aGUgdGltZXIgZnVuY3Rpb24gaXMganVzdCBzY2hlZHVsZWQgYXQgdGhlIHN0 YXJ0IC0gYnV0IGRvZXMgbm90IGZpcmUgYXQgdGhlIHN0YXJ0OyBpdCBmaXJlcyBmaXJzdCBhZnRl ciBhIHBlcmlvZCBoYXMgZXhwaXJlZCAtIG1ha2luZyBmb3IgYSB0b3RhbCBvZiAyIGludGVycnVw dHMgaW4gYSAyIG1zIGNhcHR1cmUuCgoKQWxzbywganVzdCBieSBsb29raW5nIGF0IGBtb250YWdl LWhkYS1pbnRlbC5wbmdgIHZzLiBgbW9udGFnZS1kdW1teS5wbmdgLCBvbmUgd291bGQgZ2F0aGVy IHRoYXQgdGhlIGhhcmR3YXJlIElSUSBydW5zIHNsaWdodGx5IGZhc3RlciB0aGFuIHRoZSBleHBl Y3RlZCA3MjYgzrxzIHBlcmlvZDsgd2hpbGUgdGhlIHRpbWVyIGZ1bmN0aW9uIHNvZnRpcnEgcnVu cyBzb21ld2hhdCBzbG93ZXIgdGhhbiB0aGF0LiBIb3dldmVyLCB0aGF0IGlzIGluYWNjdXJhdGUg LSBib3RoIGRyaXZlcnMnIHRpbWluZyBJUlEncyBjYW4gaml0dGVyIGluIGVpdGhlciBkaXJlY3Rp b247IHRoaXMgaXMgZXNwZWNpYWxseSBvYnZpb3VzIGlmIHNldmVyYWwgY2FwdHVyZXMgYXJlIG1h ZGUsIGFuZCB0aGVuIHRoZSBjb3JyZXNwb25kaW5nIHBsb3RzIGFuaW1hdGVkLCBhcyBzaG93biBv biB0aGUgYW5pbWF0ZWQgLmdpZiBoZXJlOgoKICAgIGh0dHA6Ly9zZGFhdWJja3Auc291cmNlZm9y Z2UubmV0L3Bvc3QvYWxzYS1jYXB0dGVzdC9jYXB0dGVzdC5naWYKCkluIHRoYXQgZ2lmLCB0aGUg cGxvdHMgd2hpY2ggd2VyZSB2ZXJ0aWNhbCBpbiB0aGUgbW9udGFnZXMsIGFyZSBub3cgc2hvd24g aG9yaXpvbnRhbGx5OyAybXMgY2FwdHVyZSBvZiBgZHVtbXlgIGlzIHNob3duIG9uIHRvcCwgd2hp bGUgdGhlIGNhcHR1cmUgb2YgYGhkYV9pbnRlbGAgaXMgc2hvd24gYmVsb3cgaXQuIEl0IGlzIG5v dGljZWFibGUgdGhhdCwgZmlyc3QsIGZvY3VzaW5nIG9uIHRoZSAiKENhcmQpIFRpbWUiIHRyYWNr LCBgaGRhLWludGVyYCBmaXJlcyBhbiBhZGRpdGlvbmFsICJzdGFydCIgaW50ZXJydXB0LCB3aGlj aCBoYXMgbm8gY291bnRlcnBhcnQgaW4gYGR1bW15YC4gSG93ZXZlciwgaXQgaXMgYWxzbyBub3Rp Y2VhYmxlIHRoYXQ6CgoqIEZvY3VzaW5nIG9uIHRoZSAiKENhcmQpIFRpbWUiIHRyYWNrLCB0aGUg YGhkYS1pbnRlbGAgaGFyZHdhcmUgaW50ZXJydXB0cyBhcmUgbXVjaCBsZXNzIGppdHRlcnkgKGFu ZCBmb2xsb3cgdGhlIGV4cGVjdGVkIDcyNiB1cyBwZXJpb2QgbW9yZSBjbG9zZWx5KSB0aGFuIHRo ZSB0aW1lciBpbnRlcnJ1cHRzIG9mIGBkdW1teWA7CgpJJ20gbm90IHN1cmUgaWYgdGhpcyBpcyB0 aGUgZXhwZWN0ZWQgYmVoYXZpb3VyLiBBcyBmYXIgYXMgSSBrbm93LCB0aGUgb3JkZXIgcHJpb3Jp dHkgb2YgaW50ZXJydXB0cyBpbiBMaW51eCBpcyAoY3J1ZGVseSk6CgogICAgaGFyZHdhcmUgSVJR ID4gc29mdElSUSAoc29mZnR3YXJlIElSUSkgPiB0YXNrIHN3aXRjaGluZy9zY2hlZHVsaW5nID4g ZXZlcnl0aGluZyBlbHNlCgpUaGUgY2FyZCB0aGVuLCB1c2VzIGl0J3Mgb3duIGNsb2NrLCB3aGlj aCBpcyBub3QgYnVyZGVuZWQgd2l0aCBhbnl0aGluZyBlbHNlIGJ1dCBmaWxsaW5nIGJ1ZmZlcnMs IG1lYW5pbmcgd2UgY2FuIGV4cGVjdCB0aWdodCB0aW1pbmcgaGVyZTsgYW5kIHdoZW4gaXQgZ2Vu ZXJhdGVzIGFuIElSUSwgaXQgaXMgaGFuZGxlZCBieSBrZXJuZWwgd2l0aCBoaWdoZXN0IHByaW9y aXR5IC0gZXJnbywgbm90IHNvIG11Y2ggaml0dGVyLiBUaW1lciBmdW5jdGlvbnMsIG9uIHRoZSBv dGhlciBoYW5kLCBydW4gaW4gc29mdElSUSBjb250ZXh0IC0gbWVhbmluZyB0aGV5IChhbmQgdGhl aXIgc2NoZWR1bGluZykgY291bGQgYmUgcHJlZW1wdGVkIGJ5IHRoZSBoYXJkd2FyZSBJUlEgb2Yg YW55IG90aGVyIGRldmljZSBvbiB0aGUgc3lzdGVtOyBlcmdvLCBtb3JlIGppdHRlci4gSXMgdGhp cyByZWFzb25hYmxlIHRvIGFzc3VtZT8KCiogV2hlbiAucG9pbnRlciBydW5zIGluIHF1aWNrIHN1 Y2Nlc3Npb24sIHRoYXQgdXN1YWxseSByZXN1bHRzIHdpdGggYSAiY29ycmVjdGlvbiIgZm9yIGBo ZGEtaW50ZWxgIC0gYnV0IGBkdW1teWAncyBwb3NpdGlvbiByZW1haW5zIHRoZSBzYW1lIGluIHRo ZSBzYW1lIHNpdHVhdGlvbgoKSSBqdXN0IG5vdGljZWQgdGhpcyB3aGlsZSB3cml0aW5nIHRoaXMg bWFpbCwgb3RoZXJ3aXNlIEkgZGlkbid0IHBheSBtdWNoIGF0dGVudGlvbiB0byBpdC4gQnV0LCBJ IGp1c3QgcmVtZW1iZXJlZCB0aGF0IHRoZSBvcmlnaW5hbCBgZHVtbXlgIGRyaXZlciwgY2FsY3Vs YXRlcyBkZWx0YSBhbmQgcmV0dXJucyBwb2ludGVyIHBvc2l0aW9uIGJhc2VkIG9uIGl0IGluIHRo ZSAucG9pbnRlciBjYWxsYmFjayBpdHNlbGY6CgogICAgZHVtbXlfaHJ0aW1lcl9wb2ludGVyKHN0 cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQogICAgewogICAgICAuLi4KICAgICAg ZGVsdGEgPSBrdGltZV91c19kZWx0YShocnRpbWVyX2NiX2dldF90aW1lKCZkcGNtLT50aW1lciks IGRwY20tPmJhc2VfdGltZSk7CiAgICAgIC4uLgogICAgICBkaXZfdTY0X3JlbShkZWx0YSwgcnVu dGltZS0+YnVmZmVyX3NpemUsICZwb3MpOyAvLyB0aGlzIHNldHMgcG9zCiAgICAgIHJldHVybiBw b3M7CiAgICB9CgouLi4gYW5kIGluIHRoYXQsIGNvdWxkIHNpbXVsYXRlIHRoZSAiY29ycmVjdGlv biIgdGhhdCBgaGRhLWludGVsYCBhbHNvIGRvZXMsIHdoZW4gY2FsbGVkIGluIHF1aWNrIHN1Y2Nl c3Npb24uCgpIb3dldmVyLCBpbiBteSB2ZXJzaW9uIG9mIHRoZSBgZHVtbXlgIGRyaXZlciwgSSdt IGFsc28gdHJ5aW5nIHRvIHdyaXRlIGEgZmV3IHB1bHNlcyB0byB0aGUgYGRtYV9hcmVhYCAtIHRo ZXJlZm9yZSBJIGFjdHVhbGx5IG1hbmFnZSB0aGUgcG9zaXRpb24gKHJldHVybmVkIGJ5IC5wb2lu dGVyKSBpbiB0aGUgaHJ0aW1lciB0YXNrbGV0IGluIGEgdmFyaWFibGUgYHBjbV9idWZfcG9zYDoK CiAgICBzdGF0aWMgdm9pZCBkdW1teV9ocnRpbWVyX3BjbV9lbGFwc2VkKHVuc2lnbmVkIGxvbmcg cHJpdikgLy8gdGhpcyBpcyB0aGUgdGFza2xldAogICAgewogICAgICAuLi4KICAgICAgZGVsdGEg PSBrdGltZV91c19kZWx0YShocnRpbWVyX2NiX2dldF90aW1lKCZkcGNtLT50aW1lciksIGRwY20t PmJhc2VfdGltZSk7CiAgICAgIC4uLgogICAgICBkaXZfdTY0X3JlbShkZWx0YSwgcnVudGltZS0+ YnVmZmVyX3NpemUsICZwb3MpOyAvLyB0aGlzIHNldHMgcG9zCiAgICAgIC4uLgogICAgICBkcGNt LT5wY21fYnVmX3BvcyA9IGZyYW1lc190b19ieXRlcyhydW50aW1lLCBwb3MpOwogICAgICAuLi4K ICAgIH0KCi4uLiBhbmQgaW4gdGhlIC5wb2ludGVyLCBJIHNpbXBseSByZXR1cm4gdGhpcyBudW1i ZXI6CgogICAgZHVtbXlfaHJ0aW1lcl9wb2ludGVyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAq c3Vic3RyZWFtKQogICAgewogICAgICAuLi4KICAgICAgcG9zID0gYnl0ZXNfdG9fZnJhbWVzKHJ1 bnRpbWUsIGRwY20tPnBjbV9idWZfcG9zKTsKICAgICAgcmV0dXJuIHBvczsKICAgIH0KCk5vdywg bm90ZSB0aGF0IHRoZSBgY2FwdHRlc3QuZ2lmYCBhbmltYXRpb24gc2hvd3MgdGhlIGppdHRlciBv ZiB0aGUgdGltZXIgKihzb2Z0KUlSUSBlbnRyeSo7IGhvd2V2ZXIsIHRoZSB0aW1lciBmdW5jdGlv biBpbiBpdHNlbGYganVzdCBzY2hlZHVsZXMgdGhlIHRhc2tsZXQgdG8gcnVuIGV2ZW4gbGF0ZXIg LSBhbmQgdGhpcyBpcyBhbHNvIHZpc2libGUgaW4gYG1vbnRhZ2UtZHVtbXkucG5nYCwgd2hlcmUg aXQgY2FuIGJlIHNlZW4gdGhhdCB0aGUgdGFza2xldCBgZHVtbXlfaHJ0aW1lcl9wY21fZWxhcHNl ZGAgdXN1YWxseSBvY2N1cnMgdXAgdG8gc29tZSAxMDAgdXMgzrxzICphZnRlciogdGhlIHRpbWVy IElSUSBlbnRyeSEgVGhpcyBwcm9iYWJseSBoYXMgYW4gaW5mbHVlbmNlIG9uIHRoZSAucG9pbnRl ciBwb3NpdGlvbiBjYWxjdWxhdGlvbiAtIGJ1dCBjYW4gaXQgYmUgdG8gc3VjaCBhIGRlZ3JlZSwg dG8gY2F1c2UgYSBQb3J0QXVkaW8gZHJvcCBpbiBmdWxsLWR1cGxleCBtb2RlPwoKClNpbmNlIEkn dmUgbWVudGlvbmVkIHdyaXRpbmcgaW4gdGhlIGBkbWFfYXJlYWA6IGBoZGEtaW50ZWxgIHByb2Jh Ymx5IHNjaGVkdWxlcyB0aGUgRE1BIGNvbnRyb2xsZXIsIHRvIHRyYW5zZmVyIHRoZSBkYXRhIGZy b20gdGhlIGludGVybiBjYXB0dXJlIG1lbW9yeSwgdG8gUkFNIG9mIHRoZSBQQyAtIGFuZCBhcyBz dWNoLCB0aGUgdHJhbnNmZXIvY29weSB1c2VzIG5vIENQVSBjeWNsZXMgKENQVSB0aW1lKS4gV2hp bGUgaW4gbXkgYGR1bW15YCwganVzdCBieSB0cnlpbmcgdG8gYG1lbXNldGAgKG5vdCBldmVuIGNv cHkpIGEgZmV3IGJ5dGVzLCBJJ20gdXNpbmcgZXh0cmEgQ1BVIGN5Y2xlcyAtIGNvdWxkIHRoaXMg YWxzbyBoYXZlIGFuIGluZmx1ZW5jZSBvbiBpbmNyZWFzZWQgaml0dGVyPwoKQW5kIG5vdyB0aGF0 IERNQSBpcyBtZW50aW9uZWQsIEkgbWlnaHQgYXMgd2VsbCBhc2sgYWdhaW46CgoqIFdoYXQgaXMg dGhlIG1lYW5pbmcgb2YgTU1BUCBpbiBjb250ZXh0IG9mIFNORFJWX1BDTV9JTkZPX01NQVA/IElz IGl0OgoqKiBBIG1lbW9yeSBtYXAgZnJvbSB0aGUgY2FyZCdzIGludGVybmFsIGJ1ZmZlciwgdmlh IERNQSwgdG8gdGhlIGBkbWFfYXJlYWAgaW4gUEMgUkFNOyBvcgoqKiBBIG1lbW9yeSBtYXAgZnJv bSBgZG1hX2FyZWFgIGluIGtlcm5lbCBzcGFjZSwgdG8gd2hhdGV2ZXIgYnVmZmVyIGlzIHJlZmVy cmVkIHRvIGluIHVzZXIgc3BhY2U/CgoKV2VsbCwgSSBob3BlIHNvbWVvbmUgd2lsbCBiZSBhYmxl IHRvIGNvbmZpcm0sIGlmIEkgYW0gcmlnaHQgaW4gbXkgdW5kZXJzdGFuZGluZyBzbyBmYXIgLSBh bmQgcG9pbnQgb3V0IHdoZXJlIGFtIEkgb3RoZXJ3aXNlIHdyb25nLi4uCgpUaGFua3MgaW4gYWR2 YW5jZSBmb3IgYW55IGZlZWRiYWNrLApDaGVlcnMhCl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fClBvcnRhdWRpbyBtYWlsaW5nIGxpc3QKUG9ydGF1ZGlvQG11 c2ljLmNvbHVtYmlhLmVkdQpodHRwOi8vbXVzaWMuY29sdW1iaWEuZWR1L21haWxtYW4vbGlzdGlu Zm8vcG9ydGF1ZGlv