From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Kazlauskas, Nicholas" Subject: Re: [PATCH 2/3] drm: Add basic helper to allow precise pageflip timestamps in vrr. Date: Wed, 13 Feb 2019 15:41:38 +0000 Message-ID: References: <20190211032225.9488-1-mario.kleiner.de@gmail.com> <20190211032225.9488-3-mario.kleiner.de@gmail.com> <20190211083540.GR23159@phenom.ffwll.local> <41354dd1-e3fe-58cc-9c10-1a8cd05b2a40@amd.com> <20190213095055.GF23159@phenom.ffwll.local> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: Content-Language: en-US Content-ID: <7E418ED712560B43BA53A6FCD0D3574D@namprd12.prod.outlook.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Daniel Vetter Cc: "Deucher, Alexander" , "dri-devel@lists.freedesktop.org" , "amd-gfx@lists.freedesktop.org" , "michel@daenzer.net" List-Id: dri-devel@lists.freedesktop.org T24gMi8xMy8xOSAxMDoxNCBBTSwgRGFuaWVsIFZldHRlciB3cm90ZToNCj4gT24gV2VkLCBGZWIg MTMsIDIwMTkgYXQgMzozMyBQTSBLYXpsYXVza2FzLCBOaWNob2xhcw0KPiA8TmljaG9sYXMuS2F6 bGF1c2thc0BhbWQuY29tPiB3cm90ZToNCj4+DQo+PiBPbiAyLzEzLzE5IDQ6NTAgQU0sIERhbmll bCBWZXR0ZXIgd3JvdGU6DQo+Pj4gT24gVHVlLCBGZWIgMTIsIDIwMTkgYXQgMTA6MzI6MzFQTSAr MDEwMCwgTWFyaW8gS2xlaW5lciB3cm90ZToNCj4+Pj4gT24gTW9uLCBGZWIgMTEsIDIwMTkgYXQg NjowNCBQTSBEYW5pZWwgVmV0dGVyIDxkYW5pZWxAZmZ3bGwuY2g+IHdyb3RlOg0KPj4+Pj4NCj4+ Pj4+IE9uIE1vbiwgRmViIDExLCAyMDE5IGF0IDQ6MDEgUE0gS2F6bGF1c2thcywgTmljaG9sYXMN Cj4+Pj4+IDxOaWNob2xhcy5LYXpsYXVza2FzQGFtZC5jb20+IHdyb3RlOg0KPj4+Pj4+DQo+Pj4+ Pj4gT24gMi8xMS8xOSAzOjM1IEFNLCBEYW5pZWwgVmV0dGVyIHdyb3RlOg0KPj4+Pj4+PiBPbiBN b24sIEZlYiAxMSwgMjAxOSBhdCAwNDoyMjoyNEFNICswMTAwLCBNYXJpbyBLbGVpbmVyIHdyb3Rl Og0KPj4+Pj4+Pj4gVGhlIHBhZ2VmbGlwIGNvbXBsZXRpb24gdGltZXN0YW1wcyB0cmFuc21pdHRl ZCB0byB1c2Vyc3BhY2UNCj4+Pj4+Pj4+IHZpYSBwYWdlZmxpcCBjb21wbGV0aW9uIGV2ZW50cyBh cmUgc3VwcG9zZWQgdG8gZGVzY3JpYmUgdGhlDQo+Pj4+Pj4+PiB0aW1lIGF0IHdoaWNoIHRoZSBm aXJzdCBwaXhlbCBvZiB0aGUgbmV3IHBvc3QtcGFnZWZsaXAgc2Nhbm91dA0KPj4+Pj4+Pj4gYnVm ZmVyIGxlYXZlcyB0aGUgdmlkZW8gb3V0cHV0IG9mIHRoZSBncHUuIFRoaXMgdGltZSBpcw0KPj4+ Pj4+Pj4gaWRlbnRpY2FsIHRvIGVuZCBvZiB2YmxhbmssIHdoZW4gYWN0aXZlIHNjYW5vdXQgc3Rh cnRzLg0KPj4+Pj4+Pj4NCj4+Pj4+Pj4+IEZvciBhIGNydGMgaW4gc3RhbmRhcmQgZml4ZWQgcmVm cmVzaCByYXRlLCB0aGUgZW5kIG9mIHZibGFuaw0KPj4+Pj4+Pj4gaXMgaWRlbnRpY2FsIHRvIHRo ZSB2YmxhbmsgdGltZXN0YW1wcyBjYWxjdWxhdGVkIGJ5DQo+Pj4+Pj4+PiBkcm1fdXBkYXRlX3Zi bGFua19jb3VudCgpIGF0IGVhY2ggdmJsYW5rIGludGVycnVwdCwgb3IgZWFjaA0KPj4+Pj4+Pj4g dmJsYW5rIGRpcy0vZW5hYmxlLiBUaGVyZWZvcmUgcGFnZWZsaXAgZXZlbnRzIGp1c3QgY2FycnkN Cj4+Pj4+Pj4+IHRoYXQgdmJsYW5rIHRpbWVzdGFtcCBhcyB0aGVpciBwYWdlZmxpcCB0aW1lc3Rh bXAuDQo+Pj4+Pj4+Pg0KPj4+Pj4+Pj4gRm9yIGEgY3J0YyBzd2l0Y2hlZCB0byB2YXJpYWJsZSBy ZWZyZXNoIHJhdGUgbW9kZSAodnJyKSwgdGhlDQo+Pj4+Pj4+PiBwYWdlZmxpcCBjb21wbGV0aW9u IHRpbWVzdGFtcHMgYXJlIGlkZW50aWNhbCB0byB0aGUgdmJsYW5rDQo+Pj4+Pj4+PiB0aW1lc3Rh bXBzIGlmZiB0aGUgcGFnZWZsaXAgd2FzIGV4ZWN1dGVkIGVhcmx5IGluIHZibGFuaywNCj4+Pj4+ Pj4+IGJlZm9yZSB0aGUgbWluaW11bSB2YmxhbmsgZHVyYXRpb24gZWxhcHNlZC4gSW4gdGhpcyBj YXNlDQo+Pj4+Pj4+PiB0aGUgdGltZSBvZiBkaXNwbGF5IG9uc2V0IGlzIGlkZW50aWNhbCB0byB3 aGVuIHRoZSBjcnRjDQo+Pj4+Pj4+PiBpcyBydW5uaW5nIGluIGZpeGVkIHJlZnJlc2ggcmF0ZS4N Cj4+Pj4+Pj4+DQo+Pj4+Pj4+PiBIb3dldmVyLCBpZiBhIHBhZ2VmbGlwIGNvbXBsZXRlcyBsYXRl ciBpbiB0aGUgdmJsYW5rLCBpbnNpZGUNCj4+Pj4+Pj4+IHRoZSAiZXh0ZW5kZWQgZnJvbnQgcG9y Y2giIGluIHZyciBtb2RlLCB0aGVuIHRoZSB2Ymxhbmsgd2lsbA0KPj4+Pj4+Pj4gdGVybWluYXRl IGF0IGEgZml4ZWQgKGJhY2sgcG9yY2gpIGR1cmF0aW9uIGFmdGVyIGZsaXAsIHNvDQo+Pj4+Pj4+ PiB0aGUgZGlzcGxheSBvbnNldCB0aW1lIGlzIGRlbGF5ZWQgY29ycmVzcG9uZGluZ2x5LiBJbiB0 aGlzDQo+Pj4+Pj4+PiBjYXNlIHRoZSB2YmxhbmsgdGltZXN0YW1wIGNvbXB1dGVkIGF0IHZibGFu ayBpcnEgdGltZSB3b3VsZA0KPj4+Pj4+Pj4gYmUgdG9vIGVhcmx5LCBhbmQgd2UgbmVlZCBhIHdh eSB0byBjYWxjdWxhdGUgYW4gZXN0aW1hdGVkDQo+Pj4+Pj4+PiBwYWdlZmxpcCB0aW1lc3RhbXAg dGhhdCB3aWxsIGJlIGxhdGVyIHRoYW4gdGhlIHZibGFuayB0aW1lc3RhbXAuDQo+Pj4+Pj4+Pg0K Pj4+Pj4+Pj4gSG93IGEgZHJpdmVyIGRldGVybWluZXMgc3VjaCBhICJsYXRlIGZsaXAiIHRpbWVz dGFtcCBpcyBodw0KPj4+Pj4+Pj4gYW5kIGRyaXZlciBzcGVjaWZpYywgYnV0IHRoaXMgcGF0Y2gg YWRkcyBhIG5ldyBoZWxwZXIgZnVuY3Rpb24NCj4+Pj4+Pj4+IHRoYXQgYWxsb3dzIHRoZSBkcml2 ZXIgdG8gcHJvcG9zZSBzdWNoIGFuIGFsdGVybmF0ZSAibGF0ZSBmbGlwIg0KPj4+Pj4+Pj4gdGlt ZXN0YW1wIGZvciB1c2UgaW4gcGFnZWZsaXAgZXZlbnRzOg0KPj4+Pj4+Pj4NCj4+Pj4+Pj4+IGRy bV9jcnRjX3NldF92cnJfcGFnZWZsaXBfdGltZXN0YW1wKGNydGMsIGZsaXBfdGltZXN0YW1wKTsN Cj4+Pj4+Pj4+DQo+Pj4+Pj4+PiBXaGVuIHNlbmRpbmcgb3V0IHBhZ2VmbGlwIGV2ZW50cywgd2Ug bm93IGNvbXBhcmUgdGhhdCBwcm9wb3NlZA0KPj4+Pj4+Pj4gZmxpcF90aW1lc3RhbXAgYWdhaW5z dCB0aGUgdmJsYW5rIHRpbWVzdGFtcCBvZiB0aGUgY3VycmVudA0KPj4+Pj4+Pj4gdmJsYW5rIG9m IGZsaXAgY29tcGxldGlvbiBhbmQgY2hvb3NlIHRvIHNlbmQgb3V0IHRoZSBncmVhdGVyLw0KPj4+ Pj4+Pj4gbGF0ZXIgdGltZXN0YW1wIGFzIGZsaXAgY29tcGxldGlvbiB0aW1lc3RhbXAuDQo+Pj4+ Pj4+Pg0KPj4+Pj4+Pj4gVGhlIG1vc3Qgc2ltcGxlIHdheSBmb3IgYSBrbXMgZHJpdmVyIHRvIHN1 cHBseSBhIHN1aXRhYmxlDQo+Pj4+Pj4+PiBmbGlwX3RpbWVzdGFtcCBpbiB2cnIgbW9kZSB3b3Vs ZCBiZSB0byBzaW1wbHkgdGFrZSBhIHRpbWVzdGFtcA0KPj4+Pj4+Pj4gYXQgc3RhcnQgb2YgdGhl IHBhZ2VmbGlwIGNvbXBsZXRpb24gaGFuZGxlciwgZS5nLiwgcGFnZWZsaXANCj4+Pj4+Pj4+IGly cSBoYW5kbGVyOiBmbGlwX3RpbWVzdGFtcCA9IGt0aW1lX2dldCgpOyBhbmQgdGhlbiBzZXQgdGhh dA0KPj4+Pj4+Pj4gYXMgcHJvcG9zZWQgImxhdGUiIGFsdGVybmF0aXZlIHRpbWVzdGFtcCB2aWEg Li4uDQo+Pj4+Pj4+PiBkcm1fY3J0Y19zZXRfdnJyX3BhZ2VmbGlwX3RpbWVzdGFtcChjcnRjLCBm bGlwX3RpbWVzdGFtcCk7DQo+Pj4+Pj4+Pg0KPj4+Pj4+Pj4gTW9yZSBjbGV2ZXIgYXBwcm9hY2hl cyBjb3VsZCB0cnkgdG8gYWRkIHNvbWUgY29ycmVjdGl2ZSBvZmZzZXQNCj4+Pj4+Pj4+IGZvciBm aXhlZCBiYWNrIHBvcmNoIGR1cmF0aW9uLCBvciBpZGVhbGx5IHVzZSBoYXJkd2FyZSBmZWF0dXJl cw0KPj4+Pj4+Pj4gbGlrZSBodyB0aW1lc3RhbXBzIHRvIGNhbGN1bGF0ZSB0aGUgZXhhY3QgZW5k IHRpbWUgb2YgdmJsYW5rLg0KPj4+Pj4+Pj4NCj4+Pj4+Pj4+IFNpZ25lZC1vZmYtYnk6IE1hcmlv IEtsZWluZXIgPG1hcmlvLmtsZWluZXIuZGVAZ21haWwuY29tPg0KPj4+Pj4+Pj4gQ2M6IE5pY2hv bGFzIEthemxhdXNrYXMgPG5pY2hvbGFzLmthemxhdXNrYXNAYW1kLmNvbT4NCj4+Pj4+Pj4+IENj OiBIYXJyeSBXZW50bGFuZCA8aGFycnkud2VudGxhbmRAYW1kLmNvbT4NCj4+Pj4+Pj4+IENjOiBB bGV4IERldWNoZXIgPGFsZXhhbmRlci5kZXVjaGVyQGFtZC5jb20+DQo+Pj4+Pj4+DQo+Pj4+Pj4+ IFVoLCB0aGlzIGxvb2tzIGxpa2UgYSBwcmV0dHkgYmFkIGhhY2suIENhbid0IHdlIGZpeCBhbWRn cHUgdG8gb25seSBnaXZlIHVzDQo+Pj4+Pj4+IHRoZSByaWdodCB0aW1lc3RhbXBlLCBvbmNlPyBX aXRoIHRoaXMgSSBndWVzcyBpZiB5b3UgZG8gYSB2YmxhbmsgcXVlcnkgaW4NCj4+Pj4+Pj4gYmV0 d2VlbiB0aGUgd3JvbmcgYW5kIHRoZSByaWdodCB2YmxhbmsgeW91J2xsIGdldCB0aGUgYm9ndXMg dmFsdWUuIE5vdA0KPj4+Pj4+PiByZWFsbHkgZ3JlYXQgZm9yIHVzZXJzcGFjZS4NCj4+Pj4+Pj4g LURhbmllbA0KPj4+Pj4+DQo+Pj4+Pj4gSSB0aGluayB3ZSBjYWxjdWxhdGUgdGhlIHRpbWVzdGFt cCBhbmQgc2VuZCB0aGUgdmJsYW5rIGV2ZW50IGJvdGggd2l0aGluDQo+Pj4+Pj4gdGhlIHBhZ2Vm bGlwIElSUSBoYW5kbGVyIHNvIGNhbGN1bGF0aW5nIHRoZSByaWdodCBwYWdlZmxpcCB0aW1lc3Rh bXANCj4+Pj4+PiBvbmNlIGNvdWxkIHByb2JhYmx5IGJlIGRvbmUuIEknbSBub3Qgc3VyZSBpZiBp dCdzIGVhc2llciB0aGFuIHByb3Bvc2luZw0KPj4+Pj4+IGEgbGF0ZXIgZmxpcCB0aW1lIHdpdGgg YW4gQVBJIGxpa2UgdGhpcyB0aG91Z2guDQo+Pj4+Pj4NCj4+Pj4+PiBUaGUgYWN0dWFsIHNjYW5v dXQgdGltZSBzaG91bGQgYmUga25vd24gZnJvbSB0aGUgcGFnZS1mbGlwIGhhbmRsZXIgc28NCj4+ Pj4+PiB0aGUgc2VtYW50aWNzIGZvciBWUlIgb24vb2ZmIHJlbWFpbiB0aGUgc2FtZS4gVGhpcyBp cyBiZWNhdXNlIHRoZQ0KPj4+Pj4+IHBhZ2UtZmxpcCB0cmlnZ2VycyBlbnRlcmluZyB0aGUgYmFj ayBwb3JjaCBpZiB3ZSdyZSBpbiB0aGUgZXh0ZW5kZWQNCj4+Pj4+PiBmcm9udCBwb3JjaC4NCj4+ Pj4+Pg0KPj4+Pj4+IEJ1dCBzY2Fub3V0IHRpbWUgZnJvbSB2YmxhbmsgZXZlbnRzIGZvciBzb21l dGhpbmcgbGlrZQ0KPj4+Pj4+IERSTV9JT0NUTF9XQUlUX1ZCTEFOSyBhcmUgZ29pbmcgdG8gYmUg d3JvbmcgaW4gbW9zdCBjYXNlcyBhbmQgYXJlIG9ubHkNCj4+Pj4+PiB0cmVhdGVkIGFzIGVzdGlt YXRlcy4gSWYgd2UncmUgaW4gdGhlIHJlZ3VsYXIgZnJvbnQgcG9yY2ggdGhlbiB0aGUNCj4+Pj4+ PiB0aW1pbmcgdG8gc2Nhbm91dCBpcyBiYXNlZCBvbiB0aGUgZml4ZWQgZHVyYXRpb24gZnJvbnQg cG9yY2ggZm9yIHRoZQ0KPj4+Pj4+IGN1cnJlbnQgbW9kZS4gSWYgd2UncmUgaW4gdGhlIGV4dGVu ZGVkIGJhY2sgcG9yY2ggdGhlbiBpdCdzIHRlY2huaWNhbGx5DQo+Pj4+Pj4gZHJpdmVyIGRlZmlu ZWQgYnV0IHRoZSBtb3N0IHJlYXNvbmFibGUgZ3Vlc3MgaXMgdG8gYXNzdW1lIHRoYXQgdGhlIGZy b250DQo+Pj4+Pj4gcG9yY2ggaXMgZ29pbmcgdG8gZW5kIGF0IGFueSBtb21lbnQsIHNvIGp1c3Qg cmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlDQo+Pj4+Pj4gYmFjayBwb3JjaCBmb3IgZ2V0dGluZyB0 aGUgc2Nhbm91dCB0aW1lLg0KPj4+Pj4+DQo+Pj4+Pj4gUHJvcG9zaW5nIHRoZSBsYXRlIHRpbWVz dGFtcCBzaG91bGRuJ3QgYWZmZWN0IHZibGFuayBldmVudCBpbiB0aGUNCj4+Pj4+PiBEUk1fSU9D VExfV0FJVF9WQkxBTksgY2FzZSBhbmQgc2hvdWxkIG9ubHkgYmUgdXNlZCBpbiB0aGUgcGFnZS1m bGlwDQo+Pj4+Pj4gZXZlbnQgY2FzZS4gSSdtIG5vdCBzdXJlIGlmIHRoYXQncyB3aGF0J3MgZ3Vh cmFudGVlZCB0byBoYXBwZW4gd2l0aCB0aGlzDQo+Pj4+Pj4gcGF0Y2ggdGhvdWdoLiBUaGVyZSBk b2Vzbid0IHNlZW0gdG8gYmUgYW55IGxvY2tpbmcgb24gZWl0aGVyDQo+Pj4+Pj4gZGV2LT52Ymxh bmtfdGltZV9sb2NrIG9yIHRoZSB2YmxhbmstPnNlcWxvY2sgc28gd2hpbGUgaXQncyBsaWtlbHkg dG8gZ2V0DQo+Pj4+Pj4gdGhlIHNhbWUgdmJsYW5rIGV2ZW50IGJhY2sgYXMgdGhlIG9uZSBqdXN0 IHN0b3JlZCBJIGRvbid0IHRoaW5rIGl0J3MNCj4+Pj4+PiBndWFyYW50ZWVkLg0KPj4+Pj4NCj4+ Pj4+IFRoYXQncyB0aGUgaW5jb25zaXN0ZW5jeSBJIG1lYW4gdG8gaGlnaGxpZ2h0IC0gdGhlIHRp bWVzdGFtcCBmb3IgdGhlDQo+Pj4+PiBzYW1lIGZyYW1lIGFzIG9ic2VydmVkIHRocm91Z2ggZmxp cCBjb21wbGV0ZSBhbmQgdGhyb3VnaCB0aGUNCj4+Pj4+IHdhaXRfdmJsYW5rIGlvY3RsIGNhbiBk aWZmZXIuIFdoaWNoIHRoZXkgcmVhbGx5IHNob3VsZG4ndC4NCj4+Pj4+DQo+Pj4+DQo+Pj4+IElk ZWFsbHkgdGhleSBzaG91bGRuJ3QgZGlmZmVyLiBUaGUga2VybmVsIGRvY3MgZm9yIGRybV9jcnRj X3N0YXRlIHNheQ0KPj4+PiB0aGF0IHZibGFuayBhbmQgcGFnZWZsaXAgdGltZXN0YW1wcyBzaG91 bGQgYWx3YXlzIG1hdGNoLiBCdXQgdGhlbiB0aGUNCj4+Pj4ga2VybmVsIGRvY3MgZm9yICJWYXJp YWJsZSByZWZyZXNoIHByb3BlcnRpZXMiIGluIGRybV9jb25uZWN0b3IuYyBmb3INCj4+Pj4gdmJs YW5rIHRpbWVzdGFtcHMgd2VyZSBjaGFuZ2VkIGZvciB0aGUgVlJSIGltcGxlbWVudGF0aW9uIGlu IExpbnV4DQo+Pj4+IDUuMC1yYyB0byByZWRlZmluZSB0aGVtIHdoZW4gaW4gVlJSIG1vZGUuIFRo ZXkgYXJlIGRlZmluZWQsIGJ1dA0KPj4+PiBwcm9iYWJseSByYXRoZXIgdXNlbGVzcyBmb3IgYW55 IHByYWN0aWNhbCBwdXJwb3NlLCBsaWtlIHRoaXM6DQo+Pj4+DQo+Pj4+ICJUaGUgc2VtYW50aWNz IGZvciB0aGUgdmVydGljYWwgYmxhbmsgdGltZXN0YW1wIGRpZmZlciB3aGVuDQo+Pj4+IHZhcmlh YmxlIHJlZnJlc2ggcmF0ZSBpcyBhY3RpdmUuIFRoZSB2ZXJ0aWNhbCBibGFuayB0aW1lc3RhbXAN Cj4+Pj4gaXMgZGVmaW5lZCB0byBiZSBhbiBlc3RpbWF0ZSB1c2luZyB0aGUgY3VycmVudCBtb2Rl J3MgZml4ZWQNCj4+Pj4gcmVmcmVzaCByYXRlIHRpbWluZ3MuIFRoZSBzZW1hbnRpY3MgZm9yIHRo ZSBwYWdlLWZsaXAgZXZlbnQNCj4+Pj4gdGltZXN0YW1wIHJlbWFpbiB0aGUgc2FtZS4iDQo+Pj4N Cj4+PiBVaCBJIG1pc3NlZCB0aGF0LiBUaGF0IHNvdW5kcyBsaWtlIG5vbnNlbnNlIHRiaC4NCj4+ Pg0KPj4+PiBTbyBvdXIgZG9jcyBjb250cmFkaWN0IGVhY2ggb3RoZXIgYXMgb2YgTGludXggNS4w LXJjLiBDZXJ0YWlubHkgaGF2aW5nDQo+Pj4+IHVzZWZ1bCB2YmxhbmsgdGltZXRhbXBzIHdvdWxk IGJlIHVzZWZ1bC4NCj4+Pg0KPj4+IFl1cCwgaW1vIHZibGFuayBzaG91bGQgc3RpbGwgbWF0Y2gg cGFnZV9mbGlwLiBPdGhlcndpc2UgSSBleHBlY3QgYSBsb3Qgb2YNCj4+PiBoaWxhcml0eSB3aWxs IGVuc3VlLg0KPj4NCj4+IEkgd291bGQgaW1hZ2luZSB5b3Ugd291bGQgc2VlIG1vcmUgYnJlYWth Z2UgYnkgY2hhbmdpbmcgdXNlcnNwYWNlDQo+PiBleHBlY3RhdGlvbnMgZm9yIHdoZW4gdGhlIGV2 ZW50IGlzIGFjdHVhbGx5IHJlY2VpdmVkLg0KPj4NCj4+IFRoZSBJT0NUTCBpcyAid2FpdCBmb3Ig dmJsYW5rIiwgYnV0IGlmIHdlIHN0YXJ0IHNlbmRpbmcgdGhlIGV2ZW50IG5lYXINCj4+IHRoZSBl bmQgb2YgdmJsYW5rIGl0IGJlY29tZXMgbW9yZSAid2FpdCBmb3IgcGFnZWZsaXAiIChuZWFyIHNj YW5vdXQpIG9yDQo+PiAid2FpdCAxNW1zIHdoaWxlIHRoZSBWUlIgZnJvbnQgcG9yY2ggdGltZXMg b3V0IGFuZCBjYXVzZXMgZmxpY2tlcmluZyIuDQo+Pg0KPj4gSSBkb24ndCBzcGVhayBmb3IgYWxs IHVzZXJzcGFjZSBidXQgaXQgc2VlbXMgbW9yZSB1c2VmdWwgdG8gbWUgdG8gaGF2ZQ0KPj4gdGhl IGV2ZW50IHNlbnQgYXQgdGhlIHN0YXJ0IG9mIHZibGFuay4NCj4gDQo+IE1heWJlIHdlIG5lZWQg dG8gdGhpbmdzLiBUaGUgcHJvYmxlbSBpcyB0aGF0IHRoZSB0aW1lc3RhbXBlIGlzIGRlZmluZWQN Cj4gdG8gYmUgY29ycmVjdCBmb3Igc3RhcnQtb2YtZnJhbWUuIEFuZCByaWdodCBub3cgdGhlIGFt ZGdwdQ0KPiBpbXBsZW1lbnRhdGlvbiBvZiBWUlIgZG9lc24ndCBldmVuIGdpdmUgYW4gYWNjdXJh dGUgdGltZXN0YW1wZSBmb3IgdGhlDQo+IGZsaXAsIHNvIG1vc3QgbGlrZWx5IG5vIG9uZSB5ZXQg dGhvdWdodCBhYm91dCB0aGlzIHByb3Blcmx5Lg0KPiBEZWZpbml0ZWx5IG5vIHRlc3RjYXNlcyAo b3IgaXQgd291bGQgaGF2ZSBiZWVuIGNhdWdodCksIHdoZXJlYXMgd2UNCj4gaGF2ZSB0b25zIG9m IHRlc3RjYXNlcyBmb3IgZml4ZWQgcmVmcmVzaC4NCg0KSSBhZ3JlZSB0aGF0IGl0IHdvdWxkIGJl IGdvb2QgdG8gaGF2ZSBkb2N1bWVudGF0aW9uIGZvciB3aGF0IHdhaXRpbmcgZm9yIA0KdmJsYW5r IGlzIHN1cHBvc2VkIHRvIG1lYW4gaGVyZS4gVGhlcmUncyBhIGJpZyBkaWZmZXJlbmNlIGJldHdl ZW4gDQpnZXR0aW5nIHRoZSBldmVudCBhdCB0aGUgc3RhcnQgb2YgdnN5bmMgdnMgdGhlIHN0YXJ0 IG9mIHRoZSBiYWNrIHBvcmNoIA0KbmVhciB0aGUgZW5kIG9mIGl0Lg0KDQo+IA0KPj4gVlJSIGlu IGl0cyBjdXJyZW50IHN0YXRlIGlzIHVzZWZ1bCBmb3IgYXBwbGljYXRpb25zIHRoYXQgYXJlbid0 DQo+PiBjb21wbGV0ZWx5IHRpbWluZyBzZW5zaXRpdmUgKGxpa2UgbW9zdCBnYW1lcykuIFRoaXMg aXMgYmVjYXVzZSB0aGUNCj4+IGRyaXZlciBoYXMgZnJlZSByZWlnbiBpbiByZXN0cmljdGluZyB0 aGUgbWluL21heCBib3VuZHMgb2YgdGhlIHJhbmdlIC0NCj4+IGFsbG93aW5nIGZvciBlbmhhbmNl bWVudHMgbGlrZSBsb3cgZnJhbWVyYXRlIGNvbXBlbnNhdGlvbiAvIEJUUi4NCj4+DQo+PiBGb3Ig YSBjb25jcmV0ZSBleGFtcGxlLCBpbWFnaW5lIHlvdSdyZSBub3QgZG9pbmcgZnJvbnRidWZmZXIg cmVuZGVyaW5nDQo+PiBidXQgeW91J3JlIHN0aWxsIHRyeWluZyB0byB0YXJnZXQgYSBzcGVjaWZp YyBzY2Fub3V0IHRpbWUuIFNvIGV2ZW4gaWYgd2UNCj4+IHdlcmUgdG8gc2VuZCB0aGUgdmJsYW5r IGV2ZW50IGF0IHZwb3MgMCB5b3UnZCBnZXQgYW4gYWNjdXJhdGUgc2Nhbm91dA0KPj4gdGltZXN0 YW1wIGZvciB0aGUgbmV4dCBzY2Fub3V0IGFmdGVyIHRoZSB2YmFjayBwb3JjaCBlbmRzLiBZb3Un cmUgbm90DQo+PiBnb2luZyB0byBiZSBkb2luZyBhbnkgcmVuZGVyaW5nIG9yIHByZXBhcmF0aW9u IGluIHRoaXMgdGltZSBiZWNhdXNlIGl0J3MNCj4+IHNpbXBseSB0b28gc2hvcnQuIFNvIHlvdSdk IHRhcmdldCB0aGUgc2Nhbm91dCBwZXJpb2QgYWZ0ZXIgdGhpcyBvbmUsDQo+PiB3aGljaCB5b3Un ZCBuZWVkIHRvIGNhbGN1bGF0ZSBzb21laG93IGluIHVzZXJzcGFjZS4gVGFraW5nIHRoZSBkZWx0 YXMNCj4+IGJldHdlZW4gdHdvIHZibGFuayBldmVudHMgaXMgY29tcGxldGVseSB1c2VsZXNzIGhl cmUgYmVjYXVzZSB5b3UnbGwgZ2V0DQo+PiBiYWNrIHRoZSB2cnIgbWluIHJlZnJlc2ggZGVsdGEu IFNvIHlvdSBjYW4gdGFrZSB5b3VyIHNvdXJjZSBjb250ZW50IHJhdGUNCj4+IG9yIHNvbWUgZml4 ZWQgcmF0ZSB5b3UnZCBsaWtlIHRvIHRhcmdldCB3aXRoaW4gdGhlIHJhbmdlIGJ1dCBldmVuIHRo ZW4NCj4+IHlvdSdyZSBzdGlsbCBub3QgZ3VhcmFudGVlZCB0byBoYXZlIHRoYXQgZmxpcCBlbmQg dXAgYXQgdGhhdCBzY2Fub3V0IHRpbWUuDQo+Pg0KPj4gVGhlIGN1cnJlbnQgc29sdXRpb24gaXMg dG8ganVzdCByZXR1cm4gdGhlIHNjYW5vdXQgcG9zIGF0IHZyciBtYXgsIG9yDQo+PiB0aGUgY3Vy cmVudCBtb2RlJ3MgZml4ZWQgcmVmcmVzaCByYXRlLiBJZiB5b3UncmUgZmxpcCBiZWZvcmUgdGhl IGZpeGVkDQo+PiBkdXJhdGlvbiBmcm9udCBwb3JjaCBlbmRzIHRoZW4gdGhhdCBzY2Fub3V0IHRp bWUgd2lsbCBsaWtlbHkgYmUgYWNjdXJhdGUNCj4+IHNpbmNlIHlvdSBjYW4ndCBmbGlwIGZhc3Rl ciB0aGFuIHZyciBtYXguDQo+Pg0KPj4gSXMgdGhlcmUgYWN0dWFsbHkgdXNlcnNwYWNlIHRoYXQg Y2FyZXMgdGhhdCB0aGVzZSB0aW1lc3RhbXBzIG5lZWQgdG8NCj4+IG1hdGNoPyBMaWtlIHNhaWQg YmVsb3csIGl0IHNlZW1zIHRoYXQgd2FpdCBmb3IgdmJsYW5rIGlzIG1vc3RseSBhYm91dA0KPj4g c2NoZWR1bGluZyBhbmQgZm9yIHRoYXQgSSB0aGluayBoYXZpbmcgdGhlIGV2ZW50IHNlbnQgYmFj ayBhdCB0aGUgc3RhcnQNCj4+IG9mIHZibGFuayBpcyBtb3JlIGltcG9ydGFudCBoZXJlLg0KPiAN Cj4gVGhlcmUncyAzIGNhc2VzOg0KPiAtIERSSTM6IFdhaXRzIGZvciB2YmxhbmsgZm9yIGZyb250 YnVmZmVyIGJsaXRzLiBJZiB5b3UgY29tYmluZSB0aGF0DQo+IHdpdGggVlJSIHRoZW4gaW1vIHlv dSBkZXNlcnZlIHRvIGtlZXAgYWxsIHRoZSBwaWVjZXMuDQo+IC0gZ2VuZXJpYyBjb21wb3NpdG9y cy4gVXNlIFZSUiBmb3Igc2NoZWR1bGluZywgZXhwZWN0IHRoYXQgYSBwYWdlX2ZsaXANCj4gcXVl dWVkIGltbWVkaWF0ZWx5IGFmdGVyIGEgcGFnZV9mbGlwIHdpbGwgaGl0IHRoZSBuZXh0IGZyYW1l LCBhbmQgbm90DQo+IHRoZSBjdXJyZW50IGZyYW1lLiBUaGV5IGFsc28gZXhwZWN0IHRoYXQgdGhp cyB3aWxsIG5vdCBnaXZlIHlvdSB0aGUNCj4gc2xvd2VzdCBwb3NzaWJsZSByZWZyZXNoIHJhdGUs IGJ1dCBJIGd1ZXNzIFZSUiBwbHVzIGZyYW1lIHNjaGVkdWxpbmcNCj4gaXMgY3VycmVudGx5IG91 dCBvZiBzY29wZS4gSXQncyBraW5kYSBqdXN0IGZvciBhcy1mYXN0LWFzLXBvc3NpYmxlDQo+IGdh bWVzLg0KPiAtIGZsaXAgdGltZXN0YW1wLiBDdXJyZW50bHkgdGhlIGVudGlyZSBjb2RlYmFzZSBh c3N1bWVzIHRoYXQgdmJsYW5rIHRzDQo+ID0gZmxpcCB0cy4gSSBkb24ndCByZWFsbHkgc2VlIGEg cG9pbnQgaW4gYnJlYWtpbmcgdGhhdC4NCj4gLSBiZXR0ZXIgc2NoZWR1bGluZyBvZiBWUlI6IHdo YXQgY29tcG9zaXRvcnMgYWN0dWFsbHkgZG8gaXNuJ3Qgd2FpdA0KPiBmb3IgdGhlIHZibGFuaywg dGhhdCBvbmx5IGxhdGNoZXMgdGhlIHBhZ2VfZmxpcC4gVGhleSBzZXQgdXAgYQ0KPiBocnRpbWVy LCB3aXRoIGEgZml4ZWQvYXV0by10dW5lZCBoZWFkLXN0YXJ0LCBmcm9tIHdoaWNoIHRoZXkgc3Rh cnQNCj4gdGhlaXIgcmVuZGVyaW5nLiBUaGUgc2FtZSBjb3VsZCBiZSBkb25lIGZvciBWUlIsIGlm IHdlIGV4cG9zZSB0aGUNCj4gZWFybGllc3QvbGF0ZXN0IHZibGFuayBlbmQgdGltZXMgKGFuZCBo b3cgbXVjaCB0aGV5IGNhbiBzaGlmdCkuIHZibGFuaw0KPiBpb2N0bCBpcyBvbmx5IHVzZWQgZm9y IHN5bmNpbmcgdGhhdCB1cCBhbmQgbWFraW5nIHN1cmUgd2UncmUgaGl0dGluZw0KPiB0aGUgcmln aHQgZnJhbWUuIFRoaXMgaXMgYWxsIGZvciBwYWdlZmxpcHBpbmcgY29tcG9zaXRvcnMuIFRoaXMg aXMNCj4gYWxzbyB3aGF0IHRoZXknbGwgcHJvYmFibHkga2VlcCBkb2luZyB3aGVuIHdlIGdpdmUg dGhlbSBhIGRlc2lyZWQgZmxpcA0KPiB0aW1lIChpbnN0ZWFkIG9mIGEgdGFyZ2V0IGZyYW1lKSwg dGhleSBzdGlsbCBuZWVkIGFuIGhydGltZXIgdG8gZmlyZSBhDQo+IGxpdHRsZSBiaXQgYWhlYWQg dG8gZ2V0IHRoZSBmcmFtZSByZW5kZXJlZC4NCj4gDQo+IFNvIHRha2luZyBhbGwgdG9nZXRoZXIs IHdlIGhhdmUgMiB1c2UtY2FzZXMgSSB0aGluazoNCj4gLSBmcm9udGJ1ZmZlciByZW5kZXJpbmcu IEtpbmRhIHdhbnRzIHZibGFuayBldmVudCB0byBmaXJlIGF0IHRoZQ0KPiBiZWdpbm5pbmcgb2Yg dmJsYW5rLiBXb24ndCBldmVyIGRvIFZSUg0KPiAtIHBhZ2VmbGlwcGluZyBjb21wb3NpdG9ycy4g RG9uJ3QgY2FyZSBhYm91dCB0aGUgdmJsYW5rIGV2ZW50LCBlaXRoZXINCj4gdGhleSBoYXZlIGFu IGhydGltZXIgdGltZXIgKHdoaWNoIGdldHMgc3luY2VkIHdpdGggdGhlIHZibGFuayBpb2N0bCks DQo+IG9yIGp1c3QgZmxpcCBhcyBmYXN0IGFzIHBvc3NpYmxlLiBUaGV5IGRvbid0IGNhcmUgb25l IGJpdCB3aGVuIHRoZQ0KPiB2YmxhbmsgZXZlbnQgaGFwcGVucywgYXMgbG9uZyBhcyBhIHBhZ2Vm bGlwIHNjaGVkdWxlZCBpbW1lZGlhdGVseQ0KPiBhZnRlciB0aGUgZXZlbnQgc2hvd3MgdXAgb25s eSBoaXRzIHRoZSBuZXh0IGZyYW1lICh3aGljaCBpcyB0aGUgZGVsYXkNCj4gY29kZSB0aGF0IGN1 cnJlbnRseSBzdHJldGNoZXMgdmJsYW5rIHVuZWNlc3NhcmlseSB3aXRoIFZSUiBpZiB5b3UncmUN Cj4gYWxyZWFkeSBhIGJpdCBsYXRlKS4NCj4gDQo+IE1ha2luZyBzdXJlIHRoYXQgdmJsYW5rIGFu ZCBwYWdlIGZsaXAgdGltZXN0YW1wIG1hdGNoIHRoZSByZWFsDQo+IHVzZXJzcGFjZSBzZWVtcyBs aWtlIHRoZSBjbGVhbmVzdCBzZW1hbnRpY3MsIGFuZCB0aGUgbGVhc3Qgc3VycHJpc2luZw0KPiB0 byB1c2Vyc3BhY2UuIEUuZy4gd2hhdCBoYXBwZW5zIGlmIHlvdSBpbXBsZW1lbnQgVlJSIGluIGEg Y29tcG9zaXRvciwNCj4gYnV0IHRoZW4gdHVuZSB5b3VyIGhydGltZXIgd2l0aGluIHRoZSB2Ymxh bmssIHdoZW4gdGhlIHZibGFuaw0KPiB0aW1lc3RhbXAgaXMgdG90YWxseSBub3QgcmVmbGVjdGlu ZyB5b3VyIHJlYWwgcGFnZWZsaXA/IEkganVzdCBkb24ndA0KPiBzZWUgd2hhdCdzIHRoZSB1cHNp ZGUgb2YgaGF2aW5nIGEgdmJsYW5rIHRpbWVzdGFtcCB0aGF0J3Mgbm90IGFjdHVhbGx5DQo+IHJl ZmxlY3RpbmcgdGhlIHJlYWwgZmxpcC4NCj4gDQo+IEFsc28sIGlmIHlvdXIgYXBwIHdhbnRzIHRo ZSBzdGFydCBvZiB2YmxhbmssIHRoYXQncyB2ZXJ5IGVhc3kgdG8NCj4gY29tcHV0ZTogSnVzdCBh ZGQgdGhlIHNjYW5vdXQgdGltZSB0byB0aGUgbGFzdCB2YmxhbmsgdGltZXN0YW1wLg0KPiBGaWd1 cmluZyBvdXQgdGhlIHN0YXJ0IG9mIGZyYW1lIG90b2ggaXNuJ3QgZG9hYmxlIGlmIHlvdSBjYW4n dCBxdWVyeSwNCj4gYW5kIGNvbnN0YW50bHkgcGFnZWZsaXBwaW5nIGp1c3QgdG8gaGF2ZSBhbiBh Y2N1cmF0ZSBzdGFydC1vZi1mcmFtZQ0KPiAoZm9yIHR1bmluZyB5b3VyIGhydGltZXIpIHNlZW1z IHJhdGhlciB3YXN0ZWZ1bCAtIGl0IG91dHJpZ2h0IGRlZmVhdHMNCj4gc29tZSBvZiB0aGUgdXNl LWNhc2VzIGZvciBWUlIuDQo+IA0KPiBTbyB3aGF0IGJlbmVmaXQgZG8geW91IHNlZSBpbiBoYXZp bmcgdmJsYW5rIHRzIGFuZCBwYWdlZmxpcCB0cyBub3QNCj4gYWdyZWU/IFdoYXQncyB0aGUgdXNl LWNhc2UgdGhpcyBzb2x2ZXMgLSBhc2lkZSBmcm9tICJsZXNzIHR5cGluZyIgOi0pDQo+IElmIHRo ZSBvbmx5IHVzZS1jYXNlIGlzIFZSUiBmb3IgZnJvbnRidWZmZXIgcmVuZGVyaW5nLCB0aGVuIHRo YXQNCj4gZG9lc24ndCBldmVuIHdvcmsgcmlnaHQgbm93IChhc2lkZSBmcm9tIHRoYXQgSSB0aGlu ayBpdCdzIHNvbWV0aGluZyB3ZQ0KPiBzaG91bGRuJ3Qgc3VwcG9ydCBhbmQgZGVmaW5pdGVseSBu b3QgZW5jb3VyYWdlKS4NCj4gLURhbmllbA0KDQpJJ20gYWN0dWFsbHkgZmluZSB3aXRoIG1vdmlu ZyB0aGUgdmJsYW5rIGV2ZW50IGJhY2sgdG8gdGhlIGJhY2sgcG9yY2ggDQpidXQgSSdkIGp1c3Qg YmUgd29ycmllZCBhYm91dCB1c2Vyc3BhY2UgYnJlYWthZ2VzIHRoYXQgcmVsaWVkIG9uIGl0IA0K aGFwcGVuaW5nIHRoZSBvdGhlciB3YXkuDQoNCkl0J2QgYmUgZXNwZWNpYWxseSBjb25mdXNpbmcg aWYgdGhlIFZMSU5FIHdhcyBkaWZmZXJlbnQgZm9yIGZpeGVkIHZzIA0KdmFyaWFibGUgcmVmcmVz aC4gSSB3b3VsZG4ndCB3YW50IHRvIG1vdmUgaXQgdG8gdnBvcyAwIHVubGVzcyB0aGUgZXZlbnQg DQppcyBhbHNvIGdldHRpbmcgbW92ZWQgZm9yIGZpeGVkIHJlZnJlc2ggYXMgd2VsbC4NCg0KQnV0 IGxpa2UgeW91IHNhaWQsIHRoZSBvbmx5IHRoaW5nIEkgY2FuIHRoaW5rIG9mIHRoYXQgc2hvdWxk IG5lZWQgdGhlIA0KZXZlbnQgcmlnaHQgYXdheSBpcyBsb3cgbGF0ZW5jeSAvIGZyYW1lYnVmZmVy IHJlbmRlcmluZy4NCg0KSSBjYW4gdGhpbmsgYXQgbGVhc3Qgb25lIHBvdGVudGlhbCB1c2UgY2Fz ZSB3aGVyZSB5b3Ugd291bGQgd2FudCB0byBkbyANCmZyb250IGJ1ZmZlciByZW5kZXJpbmcgZm9y IGxvdyBsYXRlbmN5IHdpdGggVlJSIC0gZW11bGF0aW9uIG9mIG9sZCANCmNvbnNvbGUgaGFyZHdh cmUuIFRoZXJlJ3Mgbm90IHJlYWxseSBhbnkgbW9kZXJuIGRpc3BsYXkgdGhhdCBoYXMgZml4ZWQg DQpyZWZyZXNoIG1vZGVzIHRoYXQgbWF0Y2ggdGhlIHJlbmRlciBmcmVxdWVuY3kgb2Ygc29tZSBj b25zb2xlcy4gQnV0IHRoaXMgDQp1c2UgY2FzZSBpc24ndCBvdXQgdGhlcmUgaW4gdGhlIHdpbGQg cmlnaHQgbm93IGF0IGxlYXN0Lg0KDQpSZWdhcmRpbmcgY29tcG9zaXRvcnM6IEkgZG9uJ3QgcmVh bGx5IHJlY29tbWVuZCBWUlIgZm9yIHRoaXMgdXNlIGNhc2UgaW4gDQpnZW5lcmFsIHNpbmNlIHlv dSdsbCB3YW50IGEgZml4ZWQgcmVmcmVzaCByYXRlIGZyZXF1ZW5jeSBmb3IgaW5wdXQgdG8gDQpm ZWVsIGNvbnNpc3RlbnQgYW5kIHRvIGF2b2lkIGFueSBmbGlja2VyaW5nIC8gbHVtaW5hbmNlIGNo YW5nZXMuIFRoZSANCmZhc3Rlc3QgcmVmcmVzaCByYXRlIHdpbGwgYmUgdGhlIG1vc3QgcmVzcG9u c2l2ZSB0byB0aGUgdXNlciBhbmQgeW91IGNhbiANCmp1c3QgdXNlZCB0aGUgZml4ZWQgcmVmcmVz aCByYXRlIG1vZGUgaW4gdGhpcyBjYXNlLiBMb3dlcmluZyB0aGUgcmVmcmVzaCANCnJhdGUgdG8g c2F2ZSBwb3dlciBzb3VuZHMgbmljZSBpbiB0aGVvcnkgYnV0IEknZCBpbWFnaW5lIGl0J2QgZmVl bCANCnRlcnJpYmxlIGluIHByYWN0aWNlLg0KDQpOaWNob2xhcyBLYXpsYXVza2FzDQoNCj4gDQo+ Pj4+PiBOb3cgYWRkZWQgY29tcGxpY2F0aW9uIGlzIHRoYXQgYW1kZ3B1IHNlbmRzIG91dCB2Ymxh bmsgZXZlbnRzIHJlYWxseQ0KPj4+Pj4gZWFybHksIHdoaWNoIGlzIHVzZWQgYnkgdXNlcnNwYWNl IHRvIGRvIGZyb250YnVmZmVyIHJlbmRlcmluZyBpbiB0aGUNCj4+Pj4+IHZibGFuayB0aW1lLiBC dXQgSSBkb24ndCB0aGluayBhbnlvbmUgd2FudHMgdG8gZG8gYm90aCBWUlIgYW5kDQo+Pj4+DQo+ Pj4+IEkgdGhpbmsgYWxsIGttcyBkcml2ZXJzIHRyeSB0byBjYWxsIGRybV9jcnRjX2hhbmRsZV92 YmxhbmsoKSBhdCBzdGFydA0KPj4+PiBvZiB2YmxhbmsgdG8gZ2l2ZSBNZXNhIHRoZSBtb3N0IHRp bWUgZm9yIGZyb250YnVmZmVyIHJlbmRlcmluZyBmb3INCj4+Pj4gY2xhc3NpYyBYLiBCdXQgdmJs YW5rIGV2ZW50cyBhcmUgYWxzbyB1c2VkIGZvciBzY2hlZHVsaW5nIGJ1ZmZlcnN3YXBzDQo+Pj4+ IG9yIG90aGVyIHN0dWZmIGZvciByZWRpcmVjdGVkIHdpbmRvd2VkIHJlbmRlcmluZywgb3Igdmlh IGFwaSdzIGxpa2UNCj4+Pj4gT01MX3N5bmNfY29udHJvbHMgZ2xYV2FpdEZvck1zY09NTCwgc28g dGhlcmUgbWlnaHQgYmUgb3RoZXIgdGhpbmdzDQo+Pj4+IGFmZmVjdGVkIGJ5IGEgbW9yZSBkZWxh eWVkIHZibGFuayBoYW5kbGluZy4NCj4+Pg0KPj4+IFRoZSBmcm9udGJ1ZmZlciByZW5kZXJpbmcg aXMgdmVyeSBtdWNoIFggZHJpdmVyIHNwZWNpZmljLCBhbmQgSSB0aGluaw0KPj4+IC1hbWRncHUv cmFkZW9uIGlzIHRoZSBvbmx5IG9uZSB0aGF0IHJlcXVpcmVzIHRoaXMuIE5vIGk5MTUgZHJpdmVy IGV2ZXINCj4+PiB1c2VkIHRoZSB2YmxhbmsgaW50ZXJydXB0IHRvIHNjaGVkdWxlIGZyb250YnVm ZmVyIGJsaXRzLCB3ZSB1c2Ugc29tZQ0KPj4+IENTLXNpZGUgc3RhbGxzLg0KPj4+DQo+Pj4gV3J0 IHNjaGVkdWxpbmcgcGFnZWZsaXBzOiBUaGUgcnVsZSBpcyB0aGF0IHJpZ2h0IGFmdGVyIHlvdSd2 ZSByZWNlaXZlZCB0aGUNCj4+PiB2YmxhbmsgZm9yIGZyYW1lIFgsIHRoZW4gYW4gaW1tZWRpYXRl bHkgc2NoZWR1bGUgcGFnZWZsaXAgc2hvdWxkIGhpdCBYKzEsDQo+Pj4gYnV0IG5vdCBYLiBhbWRn cHUgaGFkIHRoaXMgYnJva2VuLCBidXQgaXQncyBmaXhlZCBzaW5jZSBhIHdoaWxlLg0KPj4+DQo+ Pj4+PiBmcm9udGJ1ZmZlciByZW5kZXJpbmcsIGhlbmNlIEkgdGhpbmsgaXQgc2hvdWxkIGJlIHBv c3NpYmxlIHRvIGNyZWF0ZQ0KPj4+Pj4gY29ycmVjdCB2YmxhbmsgdGltZXN0YW1wcyBmb3IgdGhl IFZSUiBjYXNlLCB3aGlsZSBsZWF2aW5nIHRoZSBjdXJyZW50DQo+Pj4+PiBsb2dpYyBpbiBwbGFj ZSBmb3IgZXZlcnl0aGluZyBlbHNlLiBCdXQgdGhhdCBtZWFucyBtb3ZpbmcgdGhlIGVudGlyZQ0K Pj4+Pj4gdmJsYW5rIHByb2Nlc3NpbmcgdG8gd2hlcmUgeW91IGtub3cgdGhlIG5leHQgZnJhbWUn cyBzdGFydCB0aW1lIGZvcg0KPj4+Pj4gVlJSLCBib3RoIGZvciBwYWdlIGZsaXBzIGFuZCBmb3Ig YWxsIG90aGVyIHZibGFuayBldmVudHMuDQo+Pj4+PiAtRGFuaWVsDQo+Pj4+Pg0KPj4+Pg0KPj4+ PiBJIHRoaW5rIGZvciBhbWRncHUgaXQgd291bGQgYmUgZG9hYmxlIGJ5IGNhbGxpbmcgZHJtX2hh bmRsZV92YmxhbmsNCj4+Pj4gZnJvbSB0aGUgcGFnZWZsaXAgaXJxIGhhbmRsZXIgaW4gVlJSIG1v ZGUsIGFuZCB0aGVuIGFkZGl0aW9uYWxseSBmcm9tDQo+Pj4+IHRoZSB2YmxhbmsgaW50ZXJydXB0 IGhhbmRsZXIgbGlrZSBub3cuIFZibGFuayBpcnEncyBhcmUgdHJpZ2dlcmVkIHZpYQ0KPj4+PiB2 bGluZSBpbnRlcnJ1cHRzIHdpdGggcHJvZ3JhbW1hYmxlIHZlcnRpY2FsIHRyaWdnZXIgbGluZSBw b3NpdGlvbiwgc28NCj4+Pj4gd2UgY291bGQgcHJvZ3JhbSB0aGUgdHJpZ2dlciBsaW5lIHRvIGJl IHN0YXJ0IG9mIGJhY2stcG9yY2ggaW5zdGVhZCBvZg0KPj4+PiBzdGFydCBvZiBmcm9udC1wb3Jj aC4gSW4gdGhlIHBhZ2VmbGlwIGNhc2Ugd2UgZG8gdmJsYW5rIGhhbmRsaW5nICsNCj4+Pj4gdGlt ZXN0YW1waW5nICsgcGZsaXAgY29tcGxldGlvbiBmcm9tIHBmbGlwIGlycSwgYW5kIGhhdmUgdGhl IHJlZ3VsYXINCj4+Pj4gYmFjay1wb3JjaCB2YmxhbmsgaGFuZGxpbmcgZm9yIHJlZnJlc2ggY3lj bGVzIGluIHdoaWNoIG5vDQo+Pj4+IHBhZ2VmbGlwL3BmbGlwIGlycSBoYXBwZW5lZC4NCj4+Pg0K Pj4+IEhtLCBjYW4ndCB3ZSBzaW1wbHkgcHJvZ3JhbSB0aGUgdmJsYW5rIHRvIG9jY3VyIGluIHRo ZSBiYWNrIHBvcmNoIHJlZ2lvbg0KPj4+IGZvciBWUlI/IFRoZSB2YmxhbmsgdGltZXN0YW1waW5n IHNob3VsZCBhdXRvbWF0aWNhbGx5IGNvcnJlY3QgdGhlDQo+Pj4gdGltZXN0YW1wIGluIHRoYXQg Y2FzZS4gV291bGQgcmVxdWlyZSBhIGxvdCBsZXNzIGNvZGUgY2hhbmdlcy4NCj4+Pg0KPj4+IFBs dXMgdXBkYXRlIHRoZSBkb2N1bWVudGF0aW9uIG9mYy4NCj4+Pg0KPj4+PiBOb3Qgc3VyZSBpZi9o b3cgdGhhdCB3b3VsZCBtZXNzIHdpdGggYmVsb3ctdnJyLXJlZnJlc2gtcmF0ZS1yYW5nZQ0KPj4+ PiBzdXBwb3J0IGZvciBzdHV0dGVyIHJlZHVjdGlvbiBhdCBsb3cgZnBzIHRob3VnaD8gT3Igd2l0 aCBwZXJmb3JtYW5jZSwNCj4+Pj4gZ2l2ZW4gdmJsYW5rIGV2ZW50IGRpc3BhdGNoIGNvdWxkIGJl IGRlbGF5ZWQgYSBsb3QgaW4gVlJSIGNvbXBhcmVkIHRvDQo+Pj4+IG5vcm1hbCBtb2RlPyBPciB3 aXRoIGFsbCB0aGUgdmJsYW5rIGFjY291bnRpbmcgZHVyaW5nIG1vZGVzZXRzIG9yIGNydGMNCj4+ Pj4gZW4vZGlzYWJsZT8NCj4+DQo+PiBJIHRoaW5rIHdlIGhhdmUgZXh0cmEgVkxJTkVzIHRoYXQg Y2FuIGJlIHByb2dyYW1tZWQgYXQgdnBvcyAwIHRoYXQgY291bGQNCj4+IHJlc29sdmUgdGhpcyBi dXQgSSdtIHN0aWxsIG5vdCByZWFsbHkgc29sZCBvbiB0aGUgaWRlYS4NCj4+DQo+Pj4NCj4+PiBD dXJyZW50bHkgVlJSIGFuZCBleHBsaWNpdCBmcmFtZSBzY2hlZHVsaW5nIGRvbid0IG1peC4gV2Un dmUgZGlzY3Vzc2VkDQo+Pj4gdGhpcywgYW5kIGNvbnNlbnMgc2VlbXMgdG8gYmUgdGhhdCB3ZSBu ZWVkIGEgbmV3IHByb3BlcnR5IGZvciBwYWdlX2ZsaXAsDQo+Pj4gc2ltaWxhciB0byB0aGUgdGFy Z2V0IGZyYW1lLCBidXQgaW5zdGVhZCBvZiBmcmFtZXMgYSB0aW1lc3RhbXAuIFRoZW4gdGhlDQo+ Pj4gZHJpdmVyIGNhbiBoaXQgYSBzcGVjaWZpYyB0aW1lIGZvciB0aGUgbmV4dCBmcmFtZS4NCj4+ Pg0KPj4+IEFuZCBzaW5jZSBjb21wb3NpdG9ycyB1c2UgdGhlIHZibGFuayBpb2N0bCBqdXN0IHRv IGRvIGZyYW1lIHNjaGVkdWxpbmcsIEkNCj4+PiBkb24ndCB0aGluayB3ZSBoYXZlIHRvIHdvcnJ5 IGh1Z2VseSBhYm91dCBpbnRlcmFjdGlvbnMgdGhlcmUuIE11Y2ggYmV0dGVyDQo+Pj4gdG8gYWlt IGZvciBjbGVhbiBzZW1hbnRpY3MgKGkuZS4gdmJsYW5rIGFuZCBmbGlwIGNvbXBsZXRlIHRpbWVz dGFtcHMNCj4+PiBiZXR0ZXIgbWF0Y2gpLg0KPj4+DQo+Pj4+IEFsc28sIGNvdWxkIG90aGVyIGRy aXZlcnMgbGlrZSBJbnRlbCBlYXNpbHkgZG8gdGhpcyBkZWxheWVkIHZibGFuaw0KPj4+PiBwcm9j ZXNzaW5nIGluIHRoZSBub24tcGFnZWZsaXAgY2FzZT8NCj4+Pg0KPj4+IEludGVsJ3MgcHJvYmxl bSA6LSkgQnV0IHllYWggd2UgaGF2ZSBwYWdlIGZsaXAgdGltZXN0YW1wIHJlZ2lzdGVycywgc28N Cj4+PiB3b3JzdCBjYXNlIGFsbCB3ZSBuZWVkIHRvIGRvIGlzIHNodWZmbGUgY29kZSBhcm91bmQg YSBiaXQuIEFuZCB3ZSBoYXZlDQo+Pj4gaW50ZXJydXB0cyBmb3IgYm90aCBzdGFydCBvZiB2Ymxh bmsgYW5kIGFuZCBvZiB2YmxhbmsuIEl0IG1pZ2h0IGJlIGEgYml0DQo+Pj4gbW9yZSB3b3JrIGJl Y2F1c2Ugd2UgdXNlIHRoZSB2YmxhbmsgaW50ZXJydXB0IHRvIGF2b2lkIHJhY2VzIGluIGF0b21p Yw0KPj4+IHVwZGF0ZXMsIGJ1dCB0aGF0J3Mgbm90IHRvbyB0ZXJyaWJsZSB0byBmaXguDQo+Pj4N Cj4+Pj4gICBGcm9tIG15IHVzZXIgcGVyc3BlY3RpdmUgYXMgYSBkZXZlbG9wZXIgb2YgYSBuZXVy b3NjaWVuY2UgcmVzZWFyY2gNCj4+Pj4gYXBwbGljYXRpb24gdGhhdCBoYXMgYSBjb3VwbGUgb2Yg ZXhjaXRpbmcvaW1wb3J0YW50IHVzZSBjYXNlcyBmb3IgVlJSDQo+Pj4+IG1vZGUsIGkgYWJzb2x1 dGVseSBkbyBuZWVkIHRydXN0d29ydGh5IGFuZCBwcmVjaXNlIHBhZ2VmbGlwIGV2ZW50DQo+Pj4+ IHRpbWVzdGFtcHMgdGhhdCByZXByZXNlbnQgcmVhbGl0eSwgb3RoZXJ3aXNlIFZSUiBtb2RlIHdv dWxkIGJlIGxlc3MNCj4+Pj4gdGhhbiB1c2VsZXNzIGZvciBtZS4gSSBjYW4gZG8gd2l0aG91dCBt ZWFuaW5nZnVsIHZibGFuayB0aW1lc3RhbXBzIGluDQo+Pj4+IFZSUiBtb2RlIHRob3VnaCwgYW5k IGV4cGVjdGVkIHRvIGRvIHdpdGhvdXQgdGhlbSwgYXMgYW55IHNjaGVkdWxpbmcNCj4+Pj4gaGFz IHRvIGhhcHBlbiB0aW1lLWJhc2VkIGluc3RlYWQgb2YgYmFzZWQgb24gdmJsYW5rIGNvdW50cyBh bnl3YXksDQo+Pj4+IGdpdmVuIHRoYXQgdmJsYW5rIGNvdW50cyBhcmUgcXVpdGUgbWVhbmluZ2xl c3MgaWYgZXZlcnkgZnJhbWUgY2FuIGhhdmUNCj4+Pj4gYSBkaWZmZXJlbnQgZHVyYXRpb24uIEkn ZCBleHBlY3QgdGhhdCBzaXR1YXRpb24gdG8gYmUgc2ltaWxhciBmb3INCj4+Pj4gb3RoZXIgYXBw cyB0aGF0IHdvdWxkIHdhbnQgdG8gdXNlIHRpbWVzdGFtcHMgaW4gVlJSIG1vZGUgbGlrZSB2aWRl bw0KPj4+PiBnYW1lcywgbW92aWUgcGxheWVycyBvciBWUi9BUiBhcHBsaWNhdGlvbnMuDQo+Pj4N Cj4+PiBZZWFoIGZvciB0aGF0IHlvdSB3YW50IHRvIHNjaGVkdWxlIHlvdXIgZnJhbWVzIHdpdGgg YSB0YXJnZXQgZnJhbWUgbnVtYmVyLg0KPj4+IFdvdWxkIHN0aWxsIGJlIG5pY2UgaWYgdmJsYW5r IHRpbWVzdGFtcHMgd291bGRuJ3QgYmUgYW4gb3V0cmlnaHQgbGllIChhbmQNCj4+PiB0aGUgdGlt ZXN0YW1wIGlzIHN0aWxsIHVzZWZ1bCBpbmZvcm1hdGlvbiwgZXZlbiBpZiB0aGUgZnJhbWUgY291 bnRlcg0KPj4+IGlzbid0IC0gbWFueSBkaXNwbGF5cyBoYXZlIG1pbi9tYXggZnJhbWUgcmF0ZXMg Zm9yIFZSUiwgd2hpY2ggaXMNCj4+PiBpbmZvcm1hdGlvbiB3ZSBjb3VsZCBwZXJoYXBzIGV4cG9z ZSkuDQo+Pj4gLURhbmllbCA+DQo+Pj4+DQo+Pj4+IC1tYXJpbw0KPj4+Pg0KPj4+Pj4+DQo+Pj4+ Pj4gTmljaG9sYXMgS2F6bGF1c2thcw0KPj4+Pj4+DQo+Pj4+Pj4+DQo+Pj4+Pj4+PiAtLS0NCj4+ Pj4+Pj4+ICAgICBkcml2ZXJzL2dwdS9kcm0vZHJtX3ZibGFuay5jIHwgNDkgKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKystDQo+Pj4+Pj4+PiAgICAgaW5jbHVkZS9kcm0vZHJtX3Zi bGFuay5oICAgICB8ICA4ICsrKysrKw0KPj4+Pj4+Pj4gICAgIDIgZmlsZXMgY2hhbmdlZCwgNTYg aW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQ0KPj4+Pj4+Pj4NCj4+Pj4+Pj4+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3ZibGFuay5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV92 YmxhbmsuYw0KPj4+Pj4+Pj4gaW5kZXggOThlMDkxMTc1OTIxLi40YjNhNGMzOGZhYmUgMTAwNjQ0 DQo+Pj4+Pj4+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3ZibGFuay5jDQo+Pj4+Pj4+PiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3ZibGFuay5jDQo+Pj4+Pj4+PiBAQCAtODE0LDEwICs4 MTQsMjEgQEAgc3RhdGljIHZvaWQgc2VuZF92YmxhbmtfZXZlbnQoc3RydWN0IGRybV9kZXZpY2Ug KmRldiwNCj4+Pj4+Pj4+ICAgICAgICAgICAgICAgIHU2NCBzZXEsIGt0aW1lX3Qgbm93KQ0KPj4+ Pj4+Pj4gICAgIHsNCj4+Pj4+Pj4+ICAgICAgICBzdHJ1Y3QgdGltZXNwZWM2NCB0djsNCj4+Pj4+ Pj4+ICsgICAga3RpbWVfdCBhbHRfZmxpcF90aW1lOw0KPj4+Pj4+Pj4NCj4+Pj4+Pj4+ICAgICAg ICBzd2l0Y2ggKGUtPmV2ZW50LmJhc2UudHlwZSkgew0KPj4+Pj4+Pj4gLSAgICBjYXNlIERSTV9F VkVOVF9WQkxBTks6DQo+Pj4+Pj4+PiAgICAgICAgY2FzZSBEUk1fRVZFTlRfRkxJUF9DT01QTEVU RToNCj4+Pj4+Pj4+ICsgICAgICAgICAgICAvKg0KPj4+Pj4+Pj4gKyAgICAgICAgICAgICAqIEZv ciBmbGlwIGNvbXBsZXRpb24gZXZlbnRzLCBvdmVycmlkZSAibm93IiB0aW1lDQo+Pj4+Pj4+PiAr ICAgICAgICAgICAgICogd2l0aCBhbHRfZmxpcF90aW1lIHByb3ZpZGVkIGJ5IHRoZSBkcml2ZXIg dmlhDQo+Pj4+Pj4+PiArICAgICAgICAgICAgICogZHJtX2NydGNfc2V0X3Zycl9wYWdlZmxpcF90 aW1lc3RhbXAoKSBpbiBWUlIgbW9kZQ0KPj4+Pj4+Pj4gKyAgICAgICAgICAgICAqIGlmIHRoYXQg dGltZSBpcyBsYXRlciB0aGFuIGdpdmVuICJub3ciIHZibGFuayB0aW1lLg0KPj4+Pj4+Pj4gKyAg ICAgICAgICAgICAqLw0KPj4+Pj4+Pj4gKyAgICAgICAgICAgIGFsdF9mbGlwX3RpbWUgPSBkZXYt PnZibGFua1tlLT5waXBlXS5hbHRfZmxpcF90aW1lOw0KPj4+Pj4+Pj4gKyAgICAgICAgICAgIGlm IChhbHRfZmxpcF90aW1lID4gbm93KQ0KPj4+Pj4+Pj4gKyAgICAgICAgICAgICAgICAgICAgbm93 ID0gYWx0X2ZsaXBfdGltZTsNCj4+Pj4+Pj4+ICsgICAgICAgICAgICAvKiBGYWxsdGhyb3VnaCAq Lw0KPj4+Pj4+Pj4gKyAgICBjYXNlIERSTV9FVkVOVF9WQkxBTks6DQo+Pj4+Pj4+PiAgICAgICAg ICAgICAgICB0diA9IGt0aW1lX3RvX3RpbWVzcGVjNjQobm93KTsNCj4+Pj4+Pj4+ICAgICAgICAg ICAgICAgIGUtPmV2ZW50LnZibC5zZXF1ZW5jZSA9IHNlcTsNCj4+Pj4+Pj4+ICAgICAgICAgICAg ICAgIC8qDQo+Pj4+Pj4+PiBAQCAtOTE2LDExICs5MjcsNDcgQEAgdm9pZCBkcm1fY3J0Y19zZW5k X3ZibGFua19ldmVudChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsDQo+Pj4+Pj4+Pg0KPj4+Pj4+Pj4g ICAgICAgICAgICAgICAgbm93ID0ga3RpbWVfZ2V0KCk7DQo+Pj4+Pj4+PiAgICAgICAgfQ0KPj4+ Pj4+Pj4gKw0KPj4+Pj4+Pj4gICAgICAgIGUtPnBpcGUgPSBwaXBlOw0KPj4+Pj4+Pj4gICAgICAg IHNlbmRfdmJsYW5rX2V2ZW50KGRldiwgZSwgc2VxLCBub3cpOw0KPj4+Pj4+Pj4gICAgIH0NCj4+ Pj4+Pj4+ICAgICBFWFBPUlRfU1lNQk9MKGRybV9jcnRjX3NlbmRfdmJsYW5rX2V2ZW50KTsNCj4+ Pj4+Pj4+DQo+Pj4+Pj4+PiArLyoqDQo+Pj4+Pj4+PiArICogZHJtX2NydGNfc2V0X3Zycl9wYWdl ZmxpcF90aW1lc3RhbXAgLSBoZWxwZXIgdG8gc2V0IGFsdGVybmF0ZSBwYWdlZmxpcCB0aW1lDQo+ Pj4+Pj4+PiArICogQGNydGM6IHRoZSBzb3VyY2UgQ1JUQyBvZiB0aGUgcGFnZWZsaXAgY29tcGxl dGlvbiBldmVudA0KPj4+Pj4+Pj4gKyAqIEBmbGlwX3RpbWU6IFRoZSBhbHRlcm5hdGUgcGFnZWZs aXAgY29tcGxldGlvbiB0aW1lc3RhbXAgaW4gVlJSIG1vZGUNCj4+Pj4+Pj4+ICsgKg0KPj4+Pj4+ Pj4gKyAqIEluIHZhcmlhYmxlIHJlZnJlc2ggcmF0ZSBtb2RlIChWUlIpLCBhIHBhZ2VmbGlwIGNv bXBsZXRpb24gdGltZXN0YW1wIGNhcnJpZWQNCj4+Pj4+Pj4+ICsgKiBieSB0aGUgcGFnZWZsaXAg ZXZlbnQgY2FuIG5ldmVyIGJlIGVhcmxpZXIgdGhhbiB0aGUgdmJsYW5rIHRpbWVzdGFtcCBvZiB0 aGUNCj4+Pj4+Pj4+ICsgKiB2Ymxhbmsgb2YgZmxpcCBjb21wbGV0aW9uLCBhcyB0aGF0IHZibGFu ayB0aW1lc3RhbXAgZGVmaW5lcyB0aGUgZW5kIG9mIHRoZQ0KPj4+Pj4+Pj4gKyAqIHNob3J0ZXN0 IHBvc3NpYmxlIHZibGFuayBkdXJhdGlvbi4gSW4gY2FzZSBvZiBhIGRlbGF5ZWQgZmxpcCBjb21w bGV0aW9uDQo+Pj4+Pj4+PiArICogaW5zaWRlIHRoZSBleHRlbmRlZCBWUlIgZnJvbnQgcG9yY2gg aG93ZXZlciwgdGhlIGVuZCBvZiB2YmxhbmsgY2FuIGJlIG11Y2gNCj4+Pj4+Pj4+ICsgKiBsYXRl ciwgc28gdGhlIGRyaXZlciBtdXN0IGFzc2lnbiBhbiBlc3RpbWF0ZWQgdGltZXN0YW1wIG9mIHRo YXQgbGF0ZXIgZW5kIG9mDQo+Pj4+Pj4+PiArICogdmJsYW5rLiBGb3IgYSBDUlRDIGluIFZSUiBt b2RlLCB0aGUgZHJpdmVyIHNob3VsZCB1c2UgdGhpcyBoZWxwZXIgZnVuY3Rpb24gdG8NCj4+Pj4+ Pj4+ICsgKiBzZXQgYW4gYWx0ZXJuYXRlIGZsaXAgY29tcGxldGlvbiB0aW1lc3RhbXAgaW4gY2Fz ZSBvZiBsYXRlIGZsaXAgY29tcGxldGlvbnMNCj4+Pj4+Pj4+ICsgKiBpbiBleHRlbmRlZCB2Ymxh bmsuIEluIHRoZSBtb3N0IHNpbXBsZSBjYXNlLCB0aGlzIEBmbGlwX3RpbWUgdGltZXN0YW1wIGNv dWxkDQo+Pj4+Pj4+PiArICogc2ltcGx5IGJlIGEga3RpbWVfZ2V0KCkgdGltZXN0YW1wIHRha2Vu IGF0IHRoZSBzdGFydCBvZiB0aGUgcGFnZWZsaXANCj4+Pj4+Pj4+ICsgKiBjb21wbGV0aW9uIHJv dXRpbmUsIHdpdGggc29tZSBjb25zdGFudCBkdXJhdGlvbiBvZiB0aGUgYmFjayBwb3JjaCBpbnRl cnZhbA0KPj4+Pj4+Pj4gKyAqIGFkZGVkLCBhbHRob3VnaCBtb3JlIHByZWNpc2UgZXN0aW1hdGVz IG1heSBiZSBwb3NzaWJsZSBvbiBzb21lIGhhcmR3YXJlIGlmDQo+Pj4+Pj4+PiArICogdGhlIGhh cmR3YXJlIHByb3ZpZGVzIHNvbWUgbWVhbnMgb2YgdGltZXN0YW1waW5nIHRoZSB0cnVlIGVuZCBv ZiB2YmxhbmsuDQo+Pj4+Pj4+PiArICoNCj4+Pj4+Pj4+ICsgKiBXaGVuIHNlbmRpbmcgb3V0IHBh Z2VmbGlwIGV2ZW50cywgZS5nLiwgdmlhIGRybV9jcnRjX3NlbmRfdmJsYW5rX2V2ZW50KCksIGl0 DQo+Pj4+Pj4+PiArICogd2lsbCB1c2UgZWl0aGVyIHRoZSBzdGFuZGFyZCB2YmxhbmsgdGltZXN0 YW1wLCBjYWxjdWxhdGVkIGZvciBhIG1pbmltdW0NCj4+Pj4+Pj4+ICsgKiBkdXJhdGlvbiB2Ymxh bmssIG9yIHRoZSBwcm92aWRlZCBAZmxpcF90aW1lIGlmIHRoYXQgdGltZSBpcyBsYXRlciB0aGFu IHRoZQ0KPj4+Pj4+Pj4gKyAqIHZibGFuayB0aW1lc3RhbXAsIHRvIGdldCB0aGUgYmVzdCBwb3Nz aWJsZSBlc3RpbWF0ZSBvZiBzdGFydCBvZiBkaXNwbGF5IG9mDQo+Pj4+Pj4+PiArICogdGhlIG5l dyBwb3N0LXBhZ2VmbGlwIHNjYW5vdXQgYnVmZmVyLg0KPj4+Pj4+Pj4gKyAqLw0KPj4+Pj4+Pj4g K3ZvaWQgZHJtX2NydGNfc2V0X3Zycl9wYWdlZmxpcF90aW1lc3RhbXAoc3RydWN0IGRybV9jcnRj ICpjcnRjLA0KPj4+Pj4+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBr dGltZV90IGZsaXBfdGltZSkNCj4+Pj4+Pj4+ICt7DQo+Pj4+Pj4+PiArICAgIHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7DQo+Pj4+Pj4+PiArICAgIHN0cnVjdCBkcm1fdmJsYW5r X2NydGMgKnZibGFuayA9ICZkZXYtPnZibGFua1tkcm1fY3J0Y19pbmRleChjcnRjKV07DQo+Pj4+ Pj4+PiArDQo+Pj4+Pj4+PiArICAgIHZibGFuay0+YWx0X2ZsaXBfdGltZSA9IGZsaXBfdGltZTsN Cj4+Pj4+Pj4+ICt9DQo+Pj4+Pj4+PiArRVhQT1JUX1NZTUJPTChkcm1fY3J0Y19zZXRfdnJyX3Bh Z2VmbGlwX3RpbWVzdGFtcCk7DQo+Pj4+Pj4+PiArDQo+Pj4+Pj4+PiAgICAgc3RhdGljIGludCBf X2VuYWJsZV92Ymxhbmsoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHBpcGUp DQo+Pj4+Pj4+PiAgICAgew0KPj4+Pj4+Pj4gICAgICAgIGlmIChkcm1fY29yZV9jaGVja19mZWF0 dXJlKGRldiwgRFJJVkVSX01PREVTRVQpKSB7DQo+Pj4+Pj4+PiBkaWZmIC0tZ2l0IGEvaW5jbHVk ZS9kcm0vZHJtX3ZibGFuay5oIGIvaW5jbHVkZS9kcm0vZHJtX3ZibGFuay5oDQo+Pj4+Pj4+PiBp bmRleCA2YWQ5NjMwZDRmNDguLmFhY2Y0NDY5NGFiNiAxMDA2NDQNCj4+Pj4+Pj4+IC0tLSBhL2lu Y2x1ZGUvZHJtL2RybV92YmxhbmsuaA0KPj4+Pj4+Pj4gKysrIGIvaW5jbHVkZS9kcm0vZHJtX3Zi bGFuay5oDQo+Pj4+Pj4+PiBAQCAtMTE3LDYgKzExNywxMiBAQCBzdHJ1Y3QgZHJtX3ZibGFua19j cnRjIHsNCj4+Pj4+Pj4+ICAgICAgICAgKiBAdGltZTogVmJsYW5rIHRpbWVzdGFtcCBjb3JyZXNw b25kaW5nIHRvIEBjb3VudC4NCj4+Pj4+Pj4+ICAgICAgICAgKi8NCj4+Pj4+Pj4+ICAgICAgICBr dGltZV90IHRpbWU7DQo+Pj4+Pj4+PiArICAgIC8qKg0KPj4+Pj4+Pj4gKyAgICAgKiBAYWx0X2Zs aXBfdGltZTogVmJsYW5rIHRpbWVzdGFtcCBmb3IgZW5kIG9mIGV4dGVuZGVkIHZibGFuayBkdWUg dG8NCj4+Pj4+Pj4+ICsgICAgICogYSBsYXRlIHBhZ2VmbGlwIGNvbXBsZXRpb24gaW4gdmFyaWFi bGUgcmVmcmVzaCByYXRlIG1vZGUuIFBhZ2VmbGlwDQo+Pj4+Pj4+PiArICAgICAqIGV2ZW50cyB3 aWxsIGNhcnJ5IHRoZSBsYXRlciBvbmUgb2YgQHRpbWUgYW5kIEBhbHRfZmxpcF90aW1lLg0KPj4+ Pj4+Pj4gKyAgICAgKi8NCj4+Pj4+Pj4+ICsgICAga3RpbWVfdCBhbHRfZmxpcF90aW1lOw0KPj4+ Pj4+Pj4NCj4+Pj4+Pj4+ICAgICAgICAvKioNCj4+Pj4+Pj4+ICAgICAgICAgKiBAcmVmY291bnQ6 IE51bWJlciBvZiB1c2Vycy93YWl0ZXJzIG9mIHRoZSB2YmxhbmsgaW50ZXJydXB0LiBPbmx5IHdo ZW4NCj4+Pj4+Pj4+IEBAIC0xNzksNiArMTg1LDggQEAgaW50IGRybV92YmxhbmtfaW5pdChzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgbnVtX2NydGNzKTsNCj4+Pj4+Pj4+ICAg ICB1NjQgZHJtX2NydGNfdmJsYW5rX2NvdW50KHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7DQo+Pj4+ Pj4+PiAgICAgdTY0IGRybV9jcnRjX3ZibGFua19jb3VudF9hbmRfdGltZShzdHJ1Y3QgZHJtX2Ny dGMgKmNydGMsDQo+Pj4+Pj4+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3Rp bWVfdCAqdmJsYW5rdGltZSk7DQo+Pj4+Pj4+PiArdm9pZCBkcm1fY3J0Y19zZXRfdnJyX3BhZ2Vm bGlwX3RpbWVzdGFtcChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsDQo+Pj4+Pj4+PiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt0aW1lX3QgZmxpcF90aW1lKTsNCj4+Pj4+Pj4+ ICAgICB2b2lkIGRybV9jcnRjX3NlbmRfdmJsYW5rX2V2ZW50KHN0cnVjdCBkcm1fY3J0YyAqY3J0 YywNCj4+Pj4+Pj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcm1fcGVu ZGluZ192YmxhbmtfZXZlbnQgKmUpOw0KPj4+Pj4+Pj4gICAgIHZvaWQgZHJtX2NydGNfYXJtX3Zi bGFua19ldmVudChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsDQo+Pj4+Pj4+PiAtLQ0KPj4+Pj4+Pj4g Mi4xNy4xDQo+Pj4+Pj4+Pg0KPj4+Pj4+Pj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18NCj4+Pj4+Pj4+IGRyaS1kZXZlbCBtYWlsaW5nIGxpc3QNCj4+Pj4+ Pj4+IGRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcNCj4+Pj4+Pj4+IGh0dHBzOi8vbGlz dHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsDQo+Pj4+Pj4+DQo+ Pj4+Pj4NCj4+Pj4+DQo+Pj4+Pg0KPj4+Pj4gLS0NCj4+Pj4+IERhbmllbCBWZXR0ZXINCj4+Pj4+ IFNvZnR3YXJlIEVuZ2luZWVyLCBJbnRlbCBDb3Jwb3JhdGlvbg0KPj4+Pj4gKzQxICgwKSA3OSAz NjUgNTcgNDggLSBodHRwOi8vYmxvZy5mZndsbC5jaA0KPj4+DQo+Pg0KPj4gTmljaG9sYXMgS2F6 bGF1c2thcw0KPj4NCj4gDQo+IA0KDQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVl ZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5m by9kcmktZGV2ZWw=