ZGlmZiAtLWdpdCBhL0ludGVsRnJhbWV3b3JrUGtnL0luY2x1ZGUvUHJvdG9jb2wvSWRlQ29udHJvbGxlckluaXQuaCBiL0ludGVsRnJhbWV3b3JrUGtnL0luY2x1ZGUvUHJvdG9jb2wvSWRlQ29udHJvbGxlckluaXQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY1NzE2Yi4uMDAwMDAwMAotLS0gYS9JbnRlbEZyYW1ld29ya1BrZy9JbmNsdWRlL1Byb3RvY29sL0lkZUNvbnRyb2xsZXJJbml0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw0NzkgKzAsMCBAQAotLyoqIEBmaWxlDQotICBUaGlzIGZpbGUgZGVjbGFyZXMgRUZJIElERSBDb250cm9sbGVyIEluaXQgUHJvdG9jb2wNCi0gIFRoZSBFRklfSURFX0NPTlRST0xMRVJfSU5JVF9QUk9UT0NPTCBwcm92aWRlcyB0aGUgY2hpcHNldC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0bw0KLSAgdGhlIElERSBidXMgZHJpdmVyLiBUaGlzIHByb3RvY29sIGlzIG1hbmRhdG9yeSBmb3IgSURFIGNvbnRyb2xsZXJzIGlmIHRoZSBJREUgZGV2aWNlcyBiZWhpbmQgdGhlDQotICBjb250cm9sbGVyIGFyZSB0byBiZSBlbnVtZXJhdGVkIGJ5IGFuIElERSBidXMgZHJpdmVyLg0KLSAgVGhlcmUgY2FuIG9ubHkgYmUgb25lIGluc3RhbmNlIG9mIEVGSV9JREVfQ09OVFJPTExFUl9JTklUX1BST1RPQ09MIGZvciBlYWNoIElERQ0KLSAgY29udHJvbGxlciBpbiBhIHN5c3RlbS4gSXQgaXMgaW5zdGFsbGVkIG9uIHRoZSBoYW5kbGUgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgSURFIGNvbnRyb2xsZXIuIEFuIElERQ0KLSAgYnVzIGRyaXZlciB0aGF0IHdpc2hlcyB0byBtYW5hZ2UgYW4gSURFIGJ1cyBhbmQgcG9zc2libHkgSURFIGRldmljZXMgaW4gYSBzeXN0ZW0gd2lsbCBoYXZlIHRvDQotICByZXRyaWV2ZSB0aGUgRUZJX0lERV9DT05UUk9MTEVSX0lOSVRfUFJPVE9DT0wgaW5zdGFuY2UgdGhhdCBpcyBhc3NvY2lhdGVkIHdpdGggdGhlDQotICBjb250cm9sbGVyIHRvIGJlIG1hbmFnZWQuDQotDQotICBDb3B5cmlnaHQgKGMpIDIwMDcgLSAyMDA5LCBJbnRlbCBDb3Jwb3JhdGlvbg0KLSAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KLSAgYXJlIGxpY2Vuc2VkIGFuZCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEJTRCBMaWNlbnNlDQotICB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbi4gIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgbWF5IGJlIGZvdW5kIGF0DQotICBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vuc2UucGhwDQotDQotICBUSEUgUFJPR1JBTSBJUyBESVNUUklCVVRFRCBVTkRFUiBUSEUgQlNEIExJQ0VOU0UgT04gQU4gIkFTIElTIiBCQVNJUywNCi0gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQuDQotDQotICBAcGFyIFJldmlzaW9uIFJlZmVyZW5jZToNCi0gIFRoaXMgUHJvdG9jb2wgaXMgZGVmaW5lZCBpbiBJREUgQ29udHJvbGxlciBJbml0aWFsaXphdGlvbiBQcm90b2NvbCBTcGVjaWZpY2F0aW9uDQotICBWZXJzaW9uIDAuOS4NCi0NCi0qKi8NCi0NCi0jaWZuZGVmIF9FRklfSURFX0NPTlRST0xMRVJfSU5JVF9QUk9UT0NPTF9IXw0KLSNkZWZpbmUgX0VGSV9JREVfQ09OVFJPTExFUl9JTklUX1BST1RPQ09MX0hfDQotDQotDQotLy8vDQotLy8vIEdsb2JhbCBJRCBmb3IgdGhlIEVGSSBQbGF0Zm9ybSBJREUgUHJvdG9jb2wgR1VJRA0KLS8vLw0KLSNkZWZpbmUgRUZJX0lERV9DT05UUk9MTEVSX0lOSVRfUFJPVE9DT0xfR1VJRCBcDQotICB7IDB4YTFlMzcwNTIsIDB4ODBkOSwgMHg0ZTY1LCB7MHhhMywgMHgxNywgMHgzZSwgMHg5YSwgMHg1NSwgMHhjNCwgMHgzZSwgMHhjOSB9IH0NCi0NCi0vLy8NCi0vLy8gRm9yd2FyZCByZWZlcmVuY2UgZm9yIHB1cmUgQU5TSSBjb21wYXRhYmlsaXR5DQotLy8vDQotdHlwZWRlZiBzdHJ1Y3QgX0VGSV9JREVfQ09OVFJPTExFUl9JTklUX1BST1RPQ09MICBFRklfSURFX0NPTlRST0xMRVJfSU5JVF9QUk9UT0NPTDsNCi0NCi0vLw0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KLS8vIEVGSV9JREVfQlVTX0VOVU1FUkFUSU9OX1BIQVNFDQotLy8gRUZJX0lERV9DT05UUk9MTEVSX0VOVU1fUEhBU0UNCi0vLw0KLXR5cGVkZWYgZW51bXsNCi0gIEVmaUlkZUJlZm9yZUNoYW5uZWxFbnVtZXJhdGlvbiwNCi0gIEVmaUlkZUFmdGVyQ2hhbm5lbEVudW1lcmF0aW9uLA0KLSAgRWZpSWRlQmVmb3JlQ2hhbm5lbFJlc2V0LA0KLSAgRWZpSWRlQWZ0ZXJDaGFubmVsUmVzZXQsDQotICBFZmlJZGVCdXNCZWZvcmVEZXZpY2VQcmVzZW5jZURldGVjdGlvbiwNCi0gIEVmaUlkZUJ1c0FmdGVyRGV2aWNlUHJlc2VuY2VEZXRlY3Rpb24sDQotICBFZmlJZGVSZXNldE1vZGUsDQotICBFZmlJZGVCdXNQaGFzZU1heGltdW0NCi19IEVGSV9JREVfQ09OVFJPTExFUl9FTlVNX1BIQVNFOw0KLQ0KLS8vDQotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0vLyBFRklfQVRBX0VYVF9UUkFOU0ZFUl9QUk9UT0NPTA0KLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotLy8NCi0vLyBUaGlzIGV4dGVuZGVkIG1vZGUgZGVzY3JpYmVzIHRoZSBTQVRBIHBoeXNpY2FsIHByb3RvY29sLg0KLS8vIFNBVEEgcGh5c2ljYWwgbGF5ZXJzIGNhbiBvcGVyYXRlIGF0IGRpZmZlcmVudCBzcGVlZHMuDQotLy8gVGhlc2Ugc3BlZWRzIGFyZSBkZWZpbmVkIGJlbG93LiBWYXJpb3VzIFBBVEEgcHJvdG9jb2xzDQotLy8gYW5kIGFzc29jaWF0ZWQgbW9kZXMgYXJlIG5vdCBhcHBsaWNhYmxlIHRvIFNBVEEgZGV2aWNlcy4NCi0vLw0KLQ0KLXR5cGVkZWYgZW51bSB7DQotICBFZmlBdGFTYXRhVHJhbnNmZXJQcm90b2NvbA0KLX0gRUZJX0FUQV9FWFRfVFJBTlNGRVJfUFJPVE9DT0w7DQotDQotI2RlZmluZSAgRUZJX1NBVEFfQVVUT19TUEVFRCAgMA0KLSNkZWZpbmUgIEVGSV9TQVRBX0dFTjFfU1BFRUQgIDENCi0jZGVmaW5lICBFRklfU0FUQV9HRU4yX1NQRUVEICAyDQotDQotLy8NCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0vLyBFRklfSURFX0NBQkxFX1RZUEUNCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0vLw0KLXR5cGVkZWYgZW51bSB7DQotICBFZmlJZGVDYWJsZVR5cGVVbmtub3duLA0KLSAgRWZpSWRlQ2FibGVUeXBlNDBwaW4sDQotICBFZmlJZGVDYWJsZVR5cGU4MFBpbiwNCi0gIEVmaUlkZUNhYmxlVHlwZVNlcmlhbCwNCi0gIEVmaUlkZUNhYmxlVHlwZU1heGltdW0NCi19IEVGSV9JREVfQ0FCTEVfVFlQRTsNCi0NCi0vLw0KLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotLy8gRUZJX0FUQV9NT0RFDQotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0vLw0KLXR5cGVkZWYgc3RydWN0IHsNCi0gIEJPT0xFQU4gICAgICBWYWxpZDsNCi0gIFVJTlQzMiAgICAgICBNb2RlOw0KLX0gRUZJX0FUQV9NT0RFOw0KLQ0KLS8vDQotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0vLyBFRklfQVRBX0VYVEVOREVEX01PREUNCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLS8vDQotdHlwZWRlZiBzdHJ1Y3Qgew0KLSAgRUZJX0FUQV9FWFRfVFJBTlNGRVJfUFJPVE9DT0wgIFRyYW5zZmVyUHJvdG9jb2w7DQotICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgTW9kZTsNCi19IEVGSV9BVEFfRVhURU5ERURfTU9ERTsNCi0NCi0vLw0KLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotLy8gRUZJX0FUQV9DT0xMRUNUSVZFX01PREUNCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLS8vDQotdHlwZWRlZiBzdHJ1Y3Qgew0KLSAgRUZJX0FUQV9NT0RFICAgICAgICAgICBQaW9Nb2RlOw0KLSAgRUZJX0FUQV9NT0RFICAgICAgICAgICBTaW5nbGVXb3JkRG1hTW9kZTsNCi0gIEVGSV9BVEFfTU9ERSAgICAgICAgICAgTXVsdGlXb3JkRG1hTW9kZTsNCi0gIEVGSV9BVEFfTU9ERSAgICAgICAgICAgVWRtYU1vZGU7DQotICBVSU5UMzIgICAgICAgICAgICAgICAgIEV4dE1vZGVDb3VudDsNCi0gIEVGSV9BVEFfRVhURU5ERURfTU9ERSAgRXh0TW9kZVsxXTsNCi19IEVGSV9BVEFfQ09MTEVDVElWRV9NT0RFOw0KLQ0KLS8vDQotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotLy8gRUZJX0FUQV9JREVOVElGWV9EQVRBDQotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotLy8NCi0NCi0jcHJhZ21hIHBhY2soMSkNCi0NCi10eXBlZGVmIHN0cnVjdCB7DQotICBVSU5UMTYgIGNvbmZpZzsgICAgICAgICAgICAgICAgIC8vLzwgR2VuZXJhbCBDb25maWd1cmF0aW9uDQotICBVSU5UMTYgIGN5bGluZGVyczsgICAgICAgICAgICAgIC8vLzwgTnVtYmVyIG9mIEN5bGluZGVycw0KLSAgVUlOVDE2ICByZXNlcnZlZF8yOw0KLSAgVUlOVDE2ICBoZWFkczsgICAgICAgICAgICAgICAgICAvLy88IE51bWJlciBvZiBsb2dpY2FsIGhlYWRzDQotICBVSU5UMTYgIHZlbmRvcl9kYXRhMTsNCi0gIFVJTlQxNiAgdmVuZG9yX2RhdGEyOw0KLSAgVUlOVDE2ICBzZWN0b3JzX3Blcl90cmFjazsNCi0gIFVJTlQxNiAgdmVuZG9yX3NwZWNpZmljXzdfOVszXTsNCi0gIENIQVI4ICAgU2VyaWFsTm9bMjBdOyAgICAgICAgICAgLy8vPCBBU0NJSQ0KLSAgVUlOVDE2ICB2ZW5kb3Jfc3BlY2lmaWNfMjBfMjFbMl07DQotICBVSU5UMTYgIGVjY19ieXRlc19hdmFpbGFibGU7DQotICBDSEFSOCAgIEZpcm13YXJlVmVyWzhdOyAgICAgICAgIC8vLzwgQVNDSUkNCi0gIENIQVI4ICAgTW9kZWxOYW1lWzQwXTsgICAgICAgICAgLy8vPCBBU0NJSQ0KLSAgVUlOVDE2ICBtdWx0aV9zZWN0b3JfY21kX21heF9zY3RfY250Ow0KLSAgVUlOVDE2ICByZXNlcnZlZF80ODsNCi0gIFVJTlQxNiAgY2FwYWJpbGl0aWVzOw0KLSAgVUlOVDE2ICByZXNlcnZlZF81MDsNCi0gIFVJTlQxNiAgcGlvX2N5Y2xlX3RpbWluZzsNCi0gIFVJTlQxNiAgcmVzZXJ2ZWRfNTI7DQotICBVSU5UMTYgIGZpZWxkX3ZhbGlkaXR5Ow0KLSAgVUlOVDE2ICBjdXJyZW50X2N5bGluZGVyczsNCi0gIFVJTlQxNiAgY3VycmVudF9oZWFkczsNCi0gIFVJTlQxNiAgY3VycmVudF9zZWN0b3JzOw0KLSAgVUlOVDE2ICBDdXJyZW50Q2FwYWNpdHlMc2I7DQotICBVSU5UMTYgIEN1cnJlbnRDYXBhY2l0eU1zYjsNCi0gIFVJTlQxNiAgcmVzZXJ2ZWRfNTk7DQotICBVSU5UMTYgIHVzZXJfYWRkcmVzc2FibGVfc2VjdG9yc19sbzsNCi0gIFVJTlQxNiAgdXNlcl9hZGRyZXNzYWJsZV9zZWN0b3JzX2hpOw0KLSAgVUlOVDE2ICByZXNlcnZlZF82MjsNCi0gIFVJTlQxNiAgbXVsdGlfd29yZF9kbWFfbW9kZTsNCi0gIFVJTlQxNiAgYWR2YW5jZWRfcGlvX21vZGVzOw0KLSAgVUlOVDE2ICBtaW5fbXVsdGlfd29yZF9kbWFfY3ljbGVfdGltZTsNCi0gIFVJTlQxNiAgcmVjX211bHRpX3dvcmRfZG1hX2N5Y2xlX3RpbWU7DQotICBVSU5UMTYgIG1pbl9waW9fY3ljbGVfdGltZV93aXRob3V0X2Zsb3dfY29udHJvbDsNCi0gIFVJTlQxNiAgbWluX3Bpb19jeWNsZV90aW1lX3dpdGhfZmxvd19jb250cm9sOw0KLSAgVUlOVDE2ICByZXNlcnZlZF82OV83OVsxMV07DQotICBVSU5UMTYgIG1ham9yX3ZlcnNpb25fbm87DQotICBVSU5UMTYgIG1pbm9yX3ZlcnNpb25fbm87DQotICBVSU5UMTYgIGNvbW1hbmRfc2V0X3N1cHBvcnRlZF84MjsgICAvLy88IHdvcmQgODINCi0gIFVJTlQxNiAgY29tbWFuZF9zZXRfc3VwcG9ydGVkXzgzOyAgIC8vLzwgd29yZCA4Mw0KLSAgVUlOVDE2ICBjb21tYW5kX3NldF9mZWF0dXJlX2V4dG47ICAgLy8vPCB3b3JkIDg0DQotICBVSU5UMTYgIGNvbW1hbmRfc2V0X2ZlYXR1cmVfZW5iXzg1OyAvLy88IHdvcmQgODUNCi0gIFVJTlQxNiAgY29tbWFuZF9zZXRfZmVhdHVyZV9lbmJfODY7IC8vLzwgd29yZCA4Ng0KLSAgVUlOVDE2ICBjb21tYW5kX3NldF9mZWF0dXJlX2RlZmF1bHQ7IC8vLzwgd29yZCA4Nw0KLSAgVUlOVDE2ICB1bHRyYV9kbWFfbW9kZTsgICAgICAgICAgICAgLy8vPCB3b3JkIDg4DQotICBVSU5UMTYgIHJlc2VydmVkXzg5XzEwNVsxN107DQotICBVSU5UMTYgIHBoeV9sb2dpY19zZWN0b3Jfc3VwcG9ydDsgICAvLy88IHdvcmQgMTA2DQotICBVSU5UMTYgIHJlc2VydmVkXzEwN18xMTZbMTBdOw0KLSAgVUlOVDE2ICBsb2dpY19zZWN0b3Jfc2l6ZV9sbzsgICAgICAgLy8vPCB3b3JkIDExNw0KLSAgVUlOVDE2ICBsb2dpY19zZWN0b3Jfc2l6ZV9oaTsgICAgICAgLy8vPCB3b3JkIDExOA0KLSAgVUlOVDE2ICByZXNlcnZlZF8xMTlfMTI3WzldOw0KLSAgVUlOVDE2ICBzZWN1cml0eV9zdGF0dXM7DQotICBVSU5UMTYgIHZlbmRvcl9kYXRhXzEyOV8xNTlbMzFdOw0KLSAgVUlOVDE2ICByZXNlcnZlZF8xNjBfMjA4WzQ5XTsNCi0gIFVJTlQxNiAgYWxpZ25tZW50X2xvZ2ljX2luX3BoeV9ibG9ja3M7IC8vLzwgd29yZCAyMDkNCi0gIFVJTlQxNiAgcmVzZXJ2ZWRfMjEwXzI1NVs0Nl07DQotfSBFRklfQVRBX0lERU5USUZZX0RBVEE7DQotDQotI3ByYWdtYSBwYWNrKCkNCi0vLw0KLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLS8vIEVGSV9BVEFQSV9JREVOVElGWV9EQVRBDQotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotLy8NCi0jcHJhZ21hIHBhY2soMSkNCi10eXBlZGVmIHN0cnVjdCB7DQotICAgIFVJTlQxNiAgY29uZmlnOyAgICAgICAgICAgICAvLy88IEdlbmVyYWwgQ29uZmlndXJhdGlvbg0KLSAgICBVSU5UMTYgIG9ic29sZXRlXzE7DQotICAgIFVJTlQxNiAgc3BlY2lmaWNfY29uZmlnOw0KLSAgICBVSU5UMTYgIG9ic29sZXRlXzM7DQotICAgIFVJTlQxNiAgcmV0aXJlZF80XzVbMl07DQotICAgIFVJTlQxNiAgb2Jzb2xldGVfNjsNCi0gICAgVUlOVDE2ICBjZmFfcmVzZXJ2ZWRfN184WzJdOw0KLSAgICBVSU5UMTYgIHJldGlyZWRfOTsNCi0gICAgQ0hBUjggICBTZXJpYWxOb1syMF07ICAgICAgIC8vLzwgQVNDSUkNCi0gICAgVUlOVDE2ICByZXRpcmVkXzIwXzIxWzJdOw0KLSAgICBVSU5UMTYgIG9ic29sZXRlXzIyOw0KLSAgICBDSEFSOCAgIEZpcm13YXJlVmVyWzhdOyAgICAgLy8vPCBBU0NJSQ0KLSAgICBDSEFSOCAgIE1vZGVsTmFtZVs0MF07ICAgICAgLy8vPCBBU0NJSQ0KLSAgICBVSU5UMTYgIG11bHRpX3NlY3Rvcl9jbWRfbWF4X3NjdF9jbnQ7DQotICAgIFVJTlQxNiAgcmVzZXJ2ZWRfNDg7DQotICAgIFVJTlQxNiAgY2FwYWJpbGl0aWVzXzQ5Ow0KLSAgICBVSU5UMTYgIGNhcGFiaWxpdGllc181MDsNCi0gICAgVUlOVDE2ICBvYnNvbGV0ZV81MV81MlsyXTsNCi0gICAgVUlOVDE2ICBmaWVsZF92YWxpZGl0eTsNCi0gICAgVUlOVDE2ICBvYnNvbGV0ZV81NF81OFs1XTsNCi0gICAgVUlOVDE2ICBtdXRpbF9zZWN0b3Jfc2V0dGluZzsNCi0gICAgVUlOVDE2ICB1c2VyX2FkZHJlc3NhYmxlX3NlY3RvcnNfbG87DQotICAgIFVJTlQxNiAgdXNlcl9hZGRyZXNzYWJsZV9zZWN0b3JzX2hpOw0KLSAgICBVSU5UMTYgIG9ic29sZXRlXzYyOw0KLSAgICBVSU5UMTYgIG11bHRpX3dvcmRfZG1hX21vZGU7DQotICAgIFVJTlQxNiAgYWR2YW5jZWRfcGlvX21vZGVzOw0KLSAgICBVSU5UMTYgIG1pbl9tdWx0aV93b3JkX2RtYV9jeWNsZV90aW1lOw0KLSAgICBVSU5UMTYgIHJlY19tdWx0aV93b3JkX2RtYV9jeWNsZV90aW1lOw0KLSAgICBVSU5UMTYgIG1pbl9waW9fY3ljbGVfdGltZV93aXRob3V0X2Zsb3dfY29udHJvbDsNCi0gICAgVUlOVDE2ICBtaW5fcGlvX2N5Y2xlX3RpbWVfd2l0aF9mbG93X2NvbnRyb2w7DQotICAgIFVJTlQxNiAgcmVzZXJ2ZWRfNjlfNzRbNl07DQotICAgIFVJTlQxNiAgcXVldWVfZGVwdGg7DQotICAgIFVJTlQxNiAgcmVzZXJ2ZWRfNzZfNzlbNF07DQotICAgIFVJTlQxNiAgbWFqb3JfdmVyc2lvbl9ubzsNCi0gICAgVUlOVDE2ICBtaW5vcl92ZXJzaW9uX25vOw0KLSAgICBVSU5UMTYgIGNtZF9zZXRfc3VwcG9ydF84MjsNCi0gICAgVUlOVDE2ICBjbWRfc2V0X3N1cHBvcnRfODM7DQotICAgIFVJTlQxNiAgY21kX2ZlYXR1cmVfc3VwcG9ydDsNCi0gICAgVUlOVDE2ICBjbWRfZmVhdHVyZV9lbmFibGVfODU7DQotICAgIFVJTlQxNiAgY21kX2ZlYXR1cmVfZW5hYmxlXzg2Ow0KLSAgICBVSU5UMTYgIGNtZF9mZWF0dXJlX2RlZmF1bHQ7DQotICAgIFVJTlQxNiAgdWx0cmFfZG1hX3NlbGVjdDsNCi0gICAgVUlOVDE2ICB0aW1lX3JlcXVpcmVkX2Zvcl9zZWNfZXJhc2U7DQotICAgIFVJTlQxNiAgdGltZV9yZXF1aXJlZF9mb3JfZW5oYW5jZWRfc2VjX2VyYXNlOw0KLSAgICBVSU5UMTYgIGN1cnJlbnRfYWR2YW5jZWRfcG93ZXJfbWdtdF92YWx1ZTsNCi0gICAgVUlOVDE2ICBtYXN0ZXJfcHdkX3Jldmlzb25fY29kZTsNCi0gICAgVUlOVDE2ICBoYXJkd2FyZV9yZXNldF9yZXN1bHQ7DQotICAgIFVJTlQxNiAgY3VycmVudF9hdXRvX2Fjb3VzdGljX21nbXRfdmFsdWU7DQotICAgIFVJTlQxNiAgcmVzZXJ2ZWRfOTVfOTlbNV07DQotICAgIFVJTlQxNiAgbWF4X3VzZXJfbGJhX2Zvcl80OGJpdF9hZGRyWzRdOw0KLSAgICBVSU5UMTYgIHJlc2VydmVkXzEwNF8xMjZbMjNdOw0KLSAgICBVSU5UMTYgIHJlbW92YWJsZV9tZWRpYV9zdGF0dXNfbm90aWZpY2F0aW9uX3N1cHBvcnQ7DQotICAgIFVJTlQxNiAgc2VjdXJpdHlfc3RhdHVzOw0KLSAgICBVSU5UMTYgIHZlbmRvcl9kYXRhXzEyOV8xNTlbMzFdOw0KLSAgICBVSU5UMTYgIGNmYV9wb3dlcl9tb2RlOw0KLSAgICBVSU5UMTYgIGNmYV9yZXNlcnZlZF8xNjFfMTc1WzE1XTsNCi0gICAgVUlOVDE2ICBjdXJyZW50X21lZGlhX3NlcmlhbF9ub1szMF07DQotICAgIFVJTlQxNiAgcmVzZXJ2ZWRfMjA2XzI1NFs0OV07DQotICAgIFVJTlQxNiAgaW50ZWdyaXR5X3dvcmQ7DQotfSBFRklfQVRBUElfSURFTlRJRllfREFUQTsNCi0NCi0jcHJhZ21hIHBhY2soKQ0KLS8vDQotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotLy8gRUZJX0lERU5USUZZX0RBVEENCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0vLw0KLXR5cGVkZWYgdW5pb24gew0KLSAgRUZJX0FUQV9JREVOVElGWV9EQVRBICAgICAgIEF0YURhdGE7DQotICBFRklfQVRBUElfSURFTlRJRllfREFUQSAgICAgQXRhcGlEYXRhOw0KLX0gRUZJX0lERU5USUZZX0RBVEE7DQotDQotI2RlZmluZSAgIEVGSV9BVEFQSV9ERVZJQ0VfSURFTlRJRllfREFUQSAgMHg4MDAwDQotDQotLy8NCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KLS8vIEZ1bmN0aW9uIHByb3RvdHlwZSBkZWNsYXJhdGlvbiwgZm9yIEFOU0kgY29tcGF0YWJpbGl0eQ0KLS8vDQotLyoqDQotICBSZXR1cm5zIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3BlY2lmaWVkIElERSBjaGFubmVsLg0KLQ0KLSAgQHBhcmFtICBUaGlzICAgICAgICAgICAgICAgICAgUG9pbnRlciB0byB0aGUgRUZJX0lERV9DT05UUk9MTEVSX0lOSVRfUFJPVE9DT0wgaW5zdGFuY2UuDQotICBAcGFyYW0gIENoYW5uZWwgICAgICAgICAgICAgICBaZXJvLWJhc2VkIGNoYW5uZWwgbnVtYmVyLg0KLSAgQHBhcmFtICBFbmFibGVkICAgICAgICAgICAgICAgVFJVRSBpZiB0aGlzIGNoYW5uZWwgaXMgZW5hYmxlZC4gRGlzYWJsZWQgY2hhbm5lbHMgYXJlIG5vdCBzY2FubmVkDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBzZWUgaWYgYW55IGRldmljZXMgYXJlIHByZXNlbnQuDQotICBAcGFyYW0gIE1heERldmljZXMgICAgICAgICAgICBUaGUgbWF4aW11bSBudW1iZXIgb2YgSURFIGRldmljZXMgdGhhdCB0aGUgYnVzIGRyaXZlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuIGV4cGVjdCBvbiB0aGlzIGNoYW5uZWwuDQotDQotICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBJbmZvcm1hdGlvbiB3YXMgcmV0dXJuZWQgd2l0aG91dCBhbnkgZXJyb3JzLg0KLSAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgQ2hhbm5lbCBpcyBpbnZhbGlkIChDaGFubmVsID49IENoYW5uZWxDb3VudCkuDQotDQotKiovDQotdHlwZWRlZg0KLUVGSV9TVEFUVVMNCi0oRUZJQVBJICpFRklfSURFX0NPTlRST0xMRVJfR0VUX0NIQU5ORUxfSU5GTykoDQotICBJTiBFRklfSURFX0NPTlRST0xMRVJfSU5JVF9QUk9UT0NPTCAqVGhpcywNCi0gIElOICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgIENoYW5uZWwsDQotICBPVVQgQk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAgICAqRW5hYmxlZCwNCi0gIE9VVCBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgICpNYXhEZXZpY2VzDQotKTsNCi0NCi0vKioNCi0gIFRoZSBub3RpZmljYXRpb25zIGZyb20gdGhlIElERSBidXMgZHJpdmVyIHRoYXQgaXQgaXMgYWJvdXQgdG8gZW50ZXIgYSBjZXJ0YWluDQotICBwaGFzZSBvZiB0aGUgSURFIGNoYW5uZWwgZW51bWVyYXRpb24gcHJvY2Vzcy4NCi0NCi0gIEBwYXJhbSAgVGhpcyAgICAgICAgICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIEVGSV9JREVfQ09OVFJPTExFUl9JTklUX1BST1RPQ09MIGluc3RhbmNlLg0KLSAgQHBhcmFtICBQaGFzZSAgICAgICAgICAgICAgICAgVGhlIHBoYXNlIGR1cmluZyBlbnVtZXJhdGlvbi4NCi0gIEBwYXJhbSAgQ2hhbm5lbCAgICAgICAgICAgICAgIFplcm8tYmFzZWQgY2hhbm5lbCBudW1iZXIuDQotDQotICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgbm90aWZpY2F0aW9uIHdhcyBhY2NlcHRlZCB3aXRob3V0IGFueSBlcnJvcnMuDQotICBAcmV0dmFsIEVGSV9OT1RfU1VQUE9SVEVEICAgICBQaGFzZSBpcyBub3Qgc3VwcG9ydGVkLg0KLSAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgQ2hhbm5lbCBpcyBpbnZhbGlkIChDaGFubmVsID49IENoYW5uZWxDb3VudCkuDQotICBAcmV0dmFsIEVGSV9OT1RfUkVBRFkgICAgICAgICBUaGlzIHBoYXNlIGNhbm5vdCBiZSBlbnRlcmVkIGF0IHRoaXMgdGltZS4NCi0NCi0qKi8NCi10eXBlZGVmDQotRUZJX1NUQVRVUw0KLShFRklBUEkgKkVGSV9JREVfQ09OVFJPTExFUl9OT1RJRllfUEhBU0UpKA0KLSAgSU4gRUZJX0lERV9DT05UUk9MTEVSX0lOSVRfUFJPVE9DT0wgICpUaGlzLA0KLSAgSU4gRUZJX0lERV9DT05UUk9MTEVSX0VOVU1fUEhBU0UgICAgIFBoYXNlLA0KLSAgSU4gVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoYW5uZWwNCi0pOw0KLQ0KLS8qKg0KLSAgU3VibWl0cyB0aGUgZGV2aWNlIGluZm9ybWF0aW9uIHRvIHRoZSBJREUgY29udHJvbGxlciBkcml2ZXIuDQotDQotICBAcGFyYW0gIFRoaXMgICAgICAgICAgICAgICAgICBQb2ludGVyIHRvIHRoZSBFRklfSURFX0NPTlRST0xMRVJfSU5JVF9QUk9UT0NPTCBpbnN0YW5jZS4NCi0gIEBwYXJhbSAgQ2hhbm5lbCAgICAgICAgICAgICAgIFplcm8tYmFzZWQgY2hhbm5lbCBudW1iZXIuDQotICBAcGFyYW0gIERldmljZSAgICAgICAgICAgICAgICBaZXJvLWJhc2VkIGRldmljZSBudW1iZXIgb24gdGhlIENoYW5uZWwuDQotICBAcGFyYW0gIElkZW50aWZ5RGF0YSAgICAgICAgICBUaGUgZGV2aWNlJ3MgcmVzcG9uc2UgdG8gdGhlIEFUQSBJREVOVElGWV9ERVZJQ0UgY29tbWFuZC4NCi0NCi0gIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSBpbmZvcm1hdGlvbiB3YXMgYWNjZXB0ZWQgd2l0aG91dCBhbnkgZXJyb3JzLg0KLSAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgQ2hhbm5lbCBpcyBpbnZhbGlkIChDaGFubmVsID49IENoYW5uZWxDb3VudCkuDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPciBEZXZpY2UgaXMgaW52YWxpZC4NCi0NCi0qKi8NCi10eXBlZGVmDQotRUZJX1NUQVRVUw0KLShFRklBUEkgKkVGSV9JREVfQ09OVFJPTExFUl9TVUJNSVRfREFUQSkoDQotICBJTiBFRklfSURFX0NPTlRST0xMRVJfSU5JVF9QUk9UT0NPTCAqVGhpcywNCi0gIElOICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgIENoYW5uZWwsDQotICBJTiAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgICBEZXZpY2UsDQotICBJTiAgRUZJX0lERU5USUZZX0RBVEEgICAgICAgICAgICAgICAqSWRlbnRpZnlEYXRhDQotKTsNCi0NCi0vKioNCi0gIERpc3F1YWxpZmllcyBzcGVjaWZpYyBtb2RlcyBmb3IgYW4gSURFIGRldmljZS4NCi0NCi0gIEBwYXJhbSAgVGhpcyAgICAgICAgICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIEVGSV9JREVfQ09OVFJPTExFUl9JTklUX1BST1RPQ09MIGluc3RhbmNlLg0KLSAgQHBhcmFtICBDaGFubmVsICAgICAgICAgICAgICAgWmVyby1iYXNlZCBjaGFubmVsIG51bWJlci4NCi0gIEBwYXJhbSAgRGV2aWNlICAgICAgICAgICAgICAgIFplcm8tYmFzZWQgZGV2aWNlIG51bWJlciBvbiB0aGUgQ2hhbm5lbC4NCi0gIEBwYXJhbSAgQmFkTW9kZXMgICAgICAgICAgICAgIFRoZSBtb2RlcyB0aGF0IHRoZSBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCBhbmQgdGhhdA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxkIGJlIGRpc3F1YWxpZmllZC4NCi0NCi0gIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSBtb2RlcyB3ZXJlIGFjY2VwdGVkIHdpdGhvdXQgYW55IGVycm9ycy4NCi0gIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIENoYW5uZWwgaXMgaW52YWxpZCAoQ2hhbm5lbCA+PSBDaGFubmVsQ291bnQpLg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3IgRGV2aWNlIGlzIGludmFsaWQuDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCi0gIEBub3RlOiBJbmNvbnNpc3RlbnQgd2l0aCBzcGVjaWZpY2F0aW9uIGhlcmU6ICANCi0gICAgICAgICBGcmFtZXdvcmsgU3BlYyBJZGVDb250IGRlZmluZWQgYW5vdGhlciBjYXNlIHRvIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVIgd2hlbg0KLSAgICAgICAgIElkZW50aWZ5RGF0YSBpcyBOVUxMLiBIb3dldmVyIGluIHRoZSBmdW5jdGlvbiB0aGVyZSBpcyBubyBwYXJhbWV0ZXIgbmFtZWQgSWRlbnRpZnlEYXRhLg0KLSAgICAgICAgIFNvIHRoYXQgc2hvdWxkIGJlIGEgdHlwbyBlcnJvciBpbiBzcGVjLg0KLQ0KLSoqLw0KLXR5cGVkZWYNCi1FRklfU1RBVFVTDQotKEVGSUFQSSAqRUZJX0lERV9DT05UUk9MTEVSX0RJU1FVQUxJRllfTU9ERSkoDQotICBJTiBFRklfSURFX0NPTlRST0xMRVJfSU5JVF9QUk9UT0NPTCAqVGhpcywNCi0gIElOICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgIENoYW5uZWwsDQotICBJTiAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgICBEZXZpY2UsDQotICBJTiAgRUZJX0FUQV9DT0xMRUNUSVZFX01PREUgICAgICAgICAqQmFkTW9kZXMNCi0pOw0KLQ0KLS8qKg0KLSAgUmV0dXJucyB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG9wdGltdW0gbW9kZXMgZm9yIHRoZSBzcGVjaWZpZWQgSURFIGRldmljZS4NCi0NCi0gIEBwYXJhbSAgVGhpcyAgICAgICAgICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIEVGSV9JREVfQ09OVFJPTExFUl9JTklUX1BST1RPQ09MIGluc3RhbmNlLg0KLSAgQHBhcmFtICBDaGFubmVsICAgICAgICAgICAgICAgWmVyby1iYXNlZCBjaGFubmVsIG51bWJlci4NCi0gIEBwYXJhbSAgRGV2aWNlICAgICAgICAgICAgICAgIFplcm8tYmFzZWQgZGV2aWNlIG51bWJlciBvbiB0aGUgQ2hhbm5lbC4NCi0gIEBwYXJhbSAgU3VwcG9ydGVkTW9kZXMgICAgICAgIFRoZSBvcHRpbXVtIG1vZGVzIGZvciB0aGUgZGV2aWNlLg0KLQ0KLSAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgU3VwcG9ydGVkTW9kZXMgd2FzIHJldHVybmVkLg0KLSAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgQ2hhbm5lbCBpcyBpbnZhbGlkIChDaGFubmVsID49IENoYW5uZWxDb3VudCkuDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPciBEZXZpY2UgaXMgaW52YWxpZC4gT3IgU3VwcG9ydGVkTW9kZXMgaXMgTlVMTC4NCi0gIEByZXR2YWwgRUZJX05PVF9SRUFEWSAgICAgICAgIE1vZGVzIGNhbm5vdCBiZSBjYWxjdWxhdGVkIGR1ZSB0byBhIGxhY2sgb2YgZGF0YS4NCi0NCi0qKi8NCi10eXBlZGVmDQotRUZJX1NUQVRVUw0KLShFRklBUEkgKkVGSV9JREVfQ09OVFJPTExFUl9DQUxDVUxBVEVfTU9ERSkoDQotICBJTiBFRklfSURFX0NPTlRST0xMRVJfSU5JVF9QUk9UT0NPTCAqVGhpcywNCi0gIElOICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgIENoYW5uZWwsDQotICBJTiAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgICBEZXZpY2UsDQotICBPVVQgRUZJX0FUQV9DT0xMRUNUSVZFX01PREUgICAgICAgICAqKlN1cHBvcnRlZE1vZGVzDQotKTsNCi0NCi0vKioNCi0gIENvbW1hbmRzIHRoZSBJREUgY29udHJvbGxlciBkcml2ZXIgdG8gcHJvZ3JhbSB0aGUgSURFIGNvbnRyb2xsZXIgaGFyZHdhcmUNCi0gIHNvIHRoYXQgdGhlIHNwZWNpZmllZCBkZXZpY2UgY2FuIG9wZXJhdGUgYXQgdGhlIHNwZWNpZmllZCBtb2RlLg0KLQ0KLSAgQHBhcmFtICBUaGlzICAgICAgICAgICAgICAgICAgUG9pbnRlciB0byB0aGUgRUZJX0lERV9DT05UUk9MTEVSX0lOSVRfUFJPVE9DT0wgaW5zdGFuY2UuDQotICBAcGFyYW0gIENoYW5uZWwgICAgICAgICAgICAgICBaZXJvLWJhc2VkIGNoYW5uZWwgbnVtYmVyLg0KLSAgQHBhcmFtICBEZXZpY2UgICAgICAgICAgICAgICAgWmVyby1iYXNlZCBkZXZpY2UgbnVtYmVyIG9uIHRoZSBDaGFubmVsLg0KLSAgQHBhcmFtICBNb2RlcyAgICAgICAgICAgICAgICAgVGhlIG1vZGVzIHRvIHNldC4NCi0NCi0gIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSBjb21tYW5kIHdhcyBhY2NlcHRlZCB3aXRob3V0IGFueSBlcnJvcnMuDQotICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBDaGFubmVsIGlzIGludmFsaWQgKENoYW5uZWwgPj0gQ2hhbm5lbENvdW50KS4NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yIERldmljZSBpcyBpbnZhbGlkLg0KLSAgQHJldHZhbCBFRklfTk9UX1JFQURZICAgICAgICAgTW9kZXMgY2Fubm90IGJlIHNldCBhdCB0aGlzIHRpbWUgZHVlIHRvIGxhY2sgb2YgZGF0YS4NCi0gIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgIE1vZGVzIGNhbm5vdCBiZSBzZXQgZHVlIHRvIGhhcmR3YXJlIGZhaWx1cmUuDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgSURFIGJ1cyBkcml2ZXIgc2hvdWxkIG5vdCB1c2UgdGhpcyBkZXZpY2UuDQotDQotKiovDQotdHlwZWRlZg0KLUVGSV9TVEFUVVMNCi0oRUZJQVBJICpFRklfSURFX0NPTlRST0xMRVJfU0VUX1RJTUlORykoDQotICBJTiBFRklfSURFX0NPTlRST0xMRVJfSU5JVF9QUk9UT0NPTCAqVGhpcywNCi0gIElOICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgIENoYW5uZWwsDQotICBJTiAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgICBEZXZpY2UsDQotICBJTiAgRUZJX0FUQV9DT0xMRUNUSVZFX01PREUgICAgICAgICAqTW9kZXMNCi0pOw0KLQ0KLS8vDQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KLS8vIEludGVyZmFjZSBzdHJ1Y3R1cmUNCi0vLyBFRklfSURFX0NPTlRST0xMRVJfSU5JVF9QUk9UT0NPTCBwcm90b2NvbCBwcm92aWRlcyB0aGUgY2hpcHNldCBzcGVjaWZpYyBpbmZvcm1hdGlvbiB0byB0aGUgSURFIGJ1cyBkcml2ZXIuDQotLy8gQW4gSURFIEJ1cyBkcml2ZXIgd2FudHMgdG8gbWFuYWdlIGFuIElERSBidXMgYW5kIHBvc3NpYmxlIElERSBkZXZpY2VzIHdpbGwgaGF2ZSB0byByZXRyaWV2ZSB0aGUNCi0vLyBFRklfSURFX0NPTlRST0xMRVJfSU5JVF9QUk9UT0NPTCBpbnN0YW5jZXMuDQotLy8NCi0vKioNCi0gIFByb3ZpZGVzIHRoZSBiYXNpYyBpbnRlcmZhY2VzIHRvIGFic3RyYWN0IGFuIElERSBjb250cm9sbGVyLg0KLSoqLw0KLXN0cnVjdCBfRUZJX0lERV9DT05UUk9MTEVSX0lOSVRfUFJPVE9DT0wgew0KLSAgLy8vDQotICAvLy8gUmV0dXJucyB0aGUgaW5mb3JtYXRpb24gYWJvdXQgYSBzcGVjaWZpYyBjaGFubmVsLg0KLSAgLy8vDQotICBFRklfSURFX0NPTlRST0xMRVJfR0VUX0NIQU5ORUxfSU5GTyAgICBHZXRDaGFubmVsSW5mbzsNCi0gIA0KLSAgLy8vDQotICAvLy8gVGhlIG5vdGlmaWNhdGlvbiB0aGF0IHRoZSBJREUgYnVzIGRyaXZlciBpcyBhYm91dCB0byBlbnRlciB0aGUNCi0gIC8vLyBzcGVjaWZpZWQgcGhhc2UgZHVyaW5nIHRoZSBlbnVtZXJhdGlvbiBwcm9jZXNzLiAgDQotICAvLy8NCi0gIEVGSV9JREVfQ09OVFJPTExFUl9OT1RJRllfUEhBU0UgICAgICAgIE5vdGlmeVBoYXNlOw0KLSAgDQotICAvLy8NCi0gIC8vLyBTdWJtaXRzIHRoZSBEcml2ZSBJZGVudGlmeSBkYXRhIHRoYXQgd2FzIHJldHVybmVkIGJ5IHRoZSBkZXZpY2UuDQotICAvLy8NCi0gIEVGSV9JREVfQ09OVFJPTExFUl9TVUJNSVRfREFUQSAgICAgICAgIFN1Ym1pdERhdGE7DQotICANCi0gIC8vLw0KLSAgLy8vIFN1Ym1pdHMgaW5mb3JtYXRpb24gYWJvdXQgbW9kZXMgdGhhdCBzaG91bGQgYmUgZGlzcXVhbGlmaWVkLg0KLSAgLy8vDQotICBFRklfSURFX0NPTlRST0xMRVJfRElTUVVBTElGWV9NT0RFICAgICBEaXNxdWFsaWZ5TW9kZTsNCi0gIA0KLSAgLy8vDQotICAvLy8gQ2FsY3VsYXRlcyBhbmQgcmV0dXJucyB0aGUgb3B0aW11bSBtb2RlIGZvciBhIHBhcnRpY3VsYXIgSURFIGRldmljZS4NCi0gIC8vLw0KLSAgRUZJX0lERV9DT05UUk9MTEVSX0NBTENVTEFURV9NT0RFICAgICAgQ2FsY3VsYXRlTW9kZTsNCi0gIA0KLSAgLy8vDQotICAvLy8gUHJvZ3JhbXMgdGhlIElERSBjb250cm9sbGVyIGhhcmR3YXJlIHRvIHRoZSBkZWZhdWx0IHRpbWluZyBvciBwZXIgdGhlIG1vZGVzDQotICAvLy8gdGhhdCB3ZXJlIHJldHVybmVkIGJ5IHRoZSBsYXN0IGNhbGwgdG8gQ2FsY3VsYXRlTW9kZSgpLiAgDQotICAvLy8NCi0gIEVGSV9JREVfQ09OVFJPTExFUl9TRVRfVElNSU5HICAgICAgICAgIFNldFRpbWluZzsNCi0gIA0KLSAgLy8vDQotICAvLy8gU2V0IHRvIFRSVUUgaWYgdGhlIGVudW1lcmF0aW9uIGdyb3VwIGluY2x1ZGVzIGFsbCB0aGUgY2hhbm5lbHMgdGhhdCBhcmUNCi0gIC8vLyBwcm9kdWNlZCBieSB0aGlzIGNvbnRyb2xsZXIuIEZBTFNFIGlmIGFuIGVudW1lcmF0aW9uIGdyb3VwIGNvbnNpc3RzIG9mDQotICAvLy8gb25seSBvbmUgY2hhbm5lbC4gIA0KLSAgLy8vDQotICBCT09MRUFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbnVtQWxsOw0KLSAgDQotICAvLy8NCi0gIC8vLyBUaGUgbnVtYmVyIG9mIGNoYW5uZWxzIHRoYXQgYXJlIHByb2R1Y2VkIGJ5IHRoaXMgY29udHJvbGxlci4NCi0gIC8vLw0KLSAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbm5lbENvdW50Ow0KLX07DQotDQotZXh0ZXJuIEVGSV9HVUlEIGdFZmlJZGVDb250cm9sbGVySW5pdFByb3RvY29sR3VpZDsNCi0NCi0jZW5kaWYNCmRpZmYgLS1naXQgYS9JbnRlbEZyYW1ld29ya1BrZy9JbmNsdWRlL1Byb3RvY29sL0luY29tcGF0aWJsZVBjaURldmljZVN1cHBvcnQuaCBiL0ludGVsRnJhbWV3b3JrUGtnL0luY2x1ZGUvUHJvdG9jb2wvSW5jb21wYXRpYmxlUGNpRGV2aWNlU3VwcG9ydC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNzYzMzk5Li4wMDAwMDAwCi0tLSBhL0ludGVsRnJhbWV3b3JrUGtnL0luY2x1ZGUvUHJvdG9jb2wvSW5jb21wYXRpYmxlUGNpRGV2aWNlU3VwcG9ydC5oCisrKyAvZGV2L251bGwKQEAgLTEsODUgKzAsMCBAQAotLyoqIEBmaWxlDQotICBUaGlzIGZpbGUgZGVjbGFyZXMgRUZJIEluY29tcGF0aWJsZSBQQ0kgRGV2aWNlIFN1cHBvcnQgUHJvdG9jb2wNCi0gIFRoaXMgcHJvdG9jb2wgYWxsb3dzIHRoZSBQQ0kgYnVzIGRyaXZlciB0byBzdXBwb3J0IHJlc291cmNlIGFsbG9jYXRpb24gZm9yIHNvbWUgUENJIGRldmljZXMgdGhhdCBkbyBub3QgY29tcGx5DQotICB3aXRoIHRoZSBQQ0kgU3BlY2lmaWNhdGlvbi4NCi0gIFRoZSBFRklfSU5DT01QQVRJQkxFX1BDSV9ERVZJQ0VfU1VQUE9SVF9QUk9UT0NPTCBpcyB1c2VkIGJ5IHRoZSBQQ0kgYnVzIGRyaXZlcg0KLSAgdG8gc3VwcG9ydCByZXNvdXJjZSBhbGxvY2F0aW9uIGZvciBzb21lIFBDSSBkZXZpY2VzIHRoYXQgZG8gbm90IGNvbXBseSB3aXRoIHRoZSBQQ0kgU3BlY2lmaWNhdGlvbi4NCi0gIFRoaXMgcHJvdG9jb2wgY2FuIGZpbmQgc29tZSBpbmNvbXBhdGlibGUgUENJIGRldmljZXMgYW5kIHJlcG9ydCB0aGVpciBzcGVjaWFsIHJlc291cmNlDQotICByZXF1aXJlbWVudHMgdG8gdGhlIFBDSSBidXMgZHJpdmVyLiBUaGUgZ2VuZXJpYyBQQ0kgYnVzIGRyaXZlciBkb2VzIG5vdCBoYXZlIHByaW9yIGtub3dsZWRnZSBvZg0KLSAgYW55IGluY29tcGF0aWJsZSBQQ0kgZGV2aWNlcy4gSXQgaW50ZXJmYWNlcyB3aXRoIHRoZQ0KLSAgRUZJX0lOQ09NUEFUSUJMRV9QQ0lfREVWSUNFX1NVUFBPUlRfUFJPVE9DT0wgdG8gZmluZCBvdXQgaWYgYSBkZXZpY2UgaXMNCi0gIGluY29tcGF0aWJsZSBhbmQgdG8gb2J0YWluIHRoZSBzcGVjaWFsIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzIGZvciBhIHNwZWNpZmljIGluY29tcGF0aWJsZSBQQ0kNCi0gIGRldmljZS4NCi0gIFRoaXMgcHJvdG9jb2wgaXMgb3B0aW9uYWwsIGFuZCBvbmx5IG9uZSBpbnN0YW5jZSBvZiB0aGlzIHByb3RvY29sIGNhbiBiZSBwcmVzZW50IGluIHRoZSBzeXN0ZW0uIElmIGENCi0gIHBsYXRmb3JtIHN1cHBvcnRzIHRoaXMgcHJvdG9jb2wsIHRoaXMgcHJvdG9jb2wgaXMgcHJvZHVjZWQgYnkgYSBEcml2ZXIgRXhlY3V0aW9uIEVudmlyb25tZW50DQotICAoRFhFKSBkcml2ZXIgYW5kIG11c3QgYmUgbWFkZSBhdmFpbGFibGUgYmVmb3JlIHRoZSBCb290IERldmljZSBTZWxlY3Rpb24gKEJEUykgcGhhc2UuIFRoZSBQQ0kNCi0gIGJ1cyBkcml2ZXIgd2lsbCBsb29rIGZvciB0aGUgcHJlc2VuY2Ugb2YgdGhpcyBwcm90b2NvbCBiZWZvcmUgaXQgYmVnaW5zIFBDSSBlbnVtZXJhdGlvbi4NCi0NCi0gIENvcHlyaWdodCAoYykgMjAwNyAtIDIwMDksIEludGVsIENvcnBvcmF0aW9uDQotICBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQotICBhcmUgbGljZW5zZWQgYW5kIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgQlNEIExpY2Vuc2UNCi0gIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLiAgVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBtYXkgYmUgZm91bmQgYXQNCi0gIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ic2QtbGljZW5zZS5waHANCi0NCi0gIFRIRSBQUk9HUkFNIElTIERJU1RSSUJVVEVEIFVOREVSIFRIRSBCU0QgTElDRU5TRSBPTiBBTiAiQVMgSVMiIEJBU0lTLA0KLSAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRC4NCi0NCi0gIEBwYXIgUmV2aXNpb24gUmVmZXJlbmNlOg0KLSAgVGhpcyBwcm90b2NvbCBpcyBkZWZpbmVkIGluIEZyYW1ld29yayBvZiBFRkkgUENJIFBsYXRmb3JtIFN1cHBvcnQgU3BlY2lmaWNhdGlvbi4NCi0gIFZlcnNpb24gMC45Lg0KLQ0KLSoqLw0KLQ0KLSNpZm5kZWYgX0lOQ09NUEFUSUJMRV9QQ0lfREVWSUNFX1NVUFBPUlRfSF8NCi0jZGVmaW5lIF9JTkNPTVBBVElCTEVfUENJX0RFVklDRV9TVVBQT1JUX0hfDQotDQotDQotI2RlZmluZSBFRklfSU5DT01QQVRJQkxFX1BDSV9ERVZJQ0VfU1VQUE9SVF9QUk9UT0NPTF9HVUlEIFwNCi0gICAgICAgIHsweGViMjNmNTVhLCAweDc4NjMsIDB4NGFjMiwgezB4OGQsIDB4M2QsIDB4OTUsIDB4NjUsIDB4MzUsIDB4ZGUsIDB4MDMsIDB4NzV9IH0NCi0NCi10eXBlZGVmIHN0cnVjdCBfRUZJX0lOQ09NUEFUSUJMRV9QQ0lfREVWSUNFX1NVUFBPUlRfUFJPVE9DT0wgRUZJX0lOQ09NUEFUSUJMRV9QQ0lfREVWSUNFX1NVUFBPUlRfUFJPVE9DT0w7DQotDQotLyoqDQotICBSZXR1cm5zIGEgbGlzdCBvZiBBQ1BJIHJlc291cmNlIGRlc2NyaXB0b3JzIHRoYXQgZGV0YWlsIHRoZSBzcGVjaWFsDQotICByZXNvdXJjZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cyBmb3IgYW4gaW5jb21wYXRpYmxlIFBDSSBkZXZpY2UuDQotDQotICBAcGFyYW0gIFRoaXMgICAgICAgICAgICAgICAgICBQb2ludGVyIHRvIHRoZSBFRklfSU5DT01QQVRJQkxFX1BDSV9ERVZJQ0VfU1VQUE9SVF9QUk9UT0NPTCBpbnN0YW5jZS4NCi0gIEBwYXJhbSAgVmVuZG9ySWQgICAgICAgICAgICAgIEEgdW5pcXVlIElEIHRvIGlkZW50aWZ5IHRoZSBtYW51ZmFjdHVyZXIgb2YgdGhlIFBDSSBkZXZpY2UuDQotICBAcGFyYW0gIERldmljZUlkICAgICAgICAgICAgICBBIHVuaXF1ZSBJRCB0byBpZGVudGlmeSB0aGUgcGFydGljdWxhciBQQ0kgZGV2aWNlLg0KLSAgQHBhcmFtICBSZXZpc2lvbklkICAgICAgICAgICAgQSBQQ0kgZGV2aWNlLXNwZWNpZmljIHJldmlzaW9uIGlkZW50aWZpZXIuDQotICBAcGFyYW0gIFN1YnN5c3RlbVZlbmRvcklkICAgICBTcGVjaWZpZXMgdGhlIHN1YnN5c3RlbSB2ZW5kb3IgSUQuDQotICBAcGFyYW0gIFN1YnN5c3RlbURldmljZUlkICAgICBTcGVjaWZpZXMgdGhlIHN1YnN5c3RlbSBkZXZpY2UgSUQuDQotICBAcGFyYW0gIENvbmZpZ3VyYXRpb24gICAgICAgICBBIGxpc3Qgb2YgQUNQSSByZXNvdXJjZSBkZXNjcmlwdG9ycyB0aGF0IGRldGFpbA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnQuDQotDQotICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgZnVuY3Rpb24gYWx3YXlzIHJldHVybnMgRUZJX1NVQ0NFU1MuDQotDQotKiovDQotdHlwZWRlZg0KLUVGSV9TVEFUVVMNCi0oRUZJQVBJICpFRklfSU5DT01QQVRJQkxFX1BDSV9ERVZJQ0VfU1VQUE9SVF9DSEVDS19ERVZJQ0UpKA0KLSAgSU4gIEVGSV9JTkNPTVBBVElCTEVfUENJX0RFVklDRV9TVVBQT1JUX1BST1RPQ09MICAqVGhpcywNCi0gIElOICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVuZG9ySWQsDQotICBJTiAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERldmljZUlkLA0KLSAgSU4gIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXZpc2lvbklkLA0KLSAgSU4gIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdWJzeXN0ZW1WZW5kb3JJZCwNCi0gIElOICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3Vic3lzdGVtRGV2aWNlSWQsDQotICBPVVQgVk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqQ29uZmlndXJhdGlvbg0KLSk7DQotDQotDQotLy8vDQotLy8vIEludGVyZmFjZSBzdHJ1Y3R1cmUgZm9yIHRoZSBJbmNvbXBhdGlibGUgUENJIERldmljZSBTdXBwb3J0IFByb3RvY29sDQotLy8vDQotc3RydWN0IF9FRklfSU5DT01QQVRJQkxFX1BDSV9ERVZJQ0VfU1VQUE9SVF9QUk9UT0NPTCB7DQotICAvLy8NCi0gIC8vLyAgUmV0dXJucyBhIGxpc3Qgb2YgQUNQSSByZXNvdXJjZSBkZXNjcmlwdG9ycyB0aGF0IGRldGFpbCBhbnkgc3BlY2lhbA0KLSAgLy8vICByZXNvdXJjZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cyBpZiB0aGUgc3BlY2lmaWVkIGRldmljZSBpcyBhIHJlY29nbml6ZWQNCi0gIC8vLyAgaW5jb21wYXRpYmxlIFBDSSBkZXZpY2UuDQotICAvLy8NCi0gIEVGSV9JTkNPTVBBVElCTEVfUENJX0RFVklDRV9TVVBQT1JUX0NIRUNLX0RFVklDRSAgICAgIENoZWNrRGV2aWNlOw0KLX07DQotDQotZXh0ZXJuIEVGSV9HVUlEIGdFZmlJbmNvbXBhdGlibGVQY2lEZXZpY2VTdXBwb3J0UHJvdG9jb2xHdWlkOw0KLQ0KLSNlbmRpZg0KZGlmZiAtLWdpdCBhL0ludGVsRnJhbWV3b3JrUGtnL0luY2x1ZGUvUHJvdG9jb2wvUGNpSG9zdEJyaWRnZVJlc291cmNlQWxsb2NhdGlvbi5oIGIvSW50ZWxGcmFtZXdvcmtQa2cvSW5jbHVkZS9Qcm90b2NvbC9QY2lIb3N0QnJpZGdlUmVzb3VyY2VBbGxvY2F0aW9uLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzMjUzZGEuLjAwMDAwMDAKLS0tIGEvSW50ZWxGcmFtZXdvcmtQa2cvSW5jbHVkZS9Qcm90b2NvbC9QY2lIb3N0QnJpZGdlUmVzb3VyY2VBbGxvY2F0aW9uLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MTQgKzAsMCBAQAotLyoqIEBmaWxlDQotICBUaGlzIGZpbGUgZGVjbGFyZXMgUGNpIEhvc3QgQnJpZGdlIFJlc291cmNlIEFsbG9jYXRpb24gUHJvdG9jb2wgd2hpY2ggDQotICBQcm92aWRlcyB0aGUgYmFzaWMgaW50ZXJmYWNlcyB0byBhYnN0cmFjdCBhIFBDSSBob3N0IGJyaWRnZSByZXNvdXJjZSBhbGxvY2F0aW9uLiANCi0gIFRoaXMgcHJvdG9jb2wgaXMgbWFuZGF0b3J5IGlmIHRoZSBzeXN0ZW0gaW5jbHVkZXMgUENJIGRldmljZXMuDQotICANCi0gIENvcHlyaWdodCAoYykgMjAwNyAtIDIwMDksIEludGVsIENvcnBvcmF0aW9uDQotICBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQotICBhcmUgbGljZW5zZWQgYW5kIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgQlNEIExpY2Vuc2UNCi0gIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLiAgVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBtYXkgYmUgZm91bmQgYXQNCi0gIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ic2QtbGljZW5zZS5waHANCi0NCi0gIFRIRSBQUk9HUkFNIElTIERJU1RSSUJVVEVEIFVOREVSIFRIRSBCU0QgTElDRU5TRSBPTiBBTiAiQVMgSVMiIEJBU0lTLA0KLSAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRC4NCi0NCi0gIEBwYXIgUmV2aXNpb24gUmVmZXJlbmNlOg0KLSAgVGhpcyBwcm90b2NvbCBpcyBkZWZpbmVkIGluIEZyYW1ld29yayBvZiBFRkkgUGNpIEhvc3QgQnJpZGdlIFJlc291cmNlIEFsbG9jYXRpb24gUHJvdG9jb2wgU3BlYw0KLSAgVmVyc2lvbiAwLjkNCi0NCi0qKi8NCi0NCi0jaWZuZGVmIF9QQ0lfSE9TVF9CUklER0VfUkVTT1VSQ0VfQUxMT0NBVElPTl9IXw0KLSNkZWZpbmUgX1BDSV9IT1NUX0JSSURHRV9SRVNPVVJDRV9BTExPQ0FUSU9OX0hfDQotDQotI2luY2x1ZGUgPFByb3RvY29sL1BjaVJvb3RCcmlkZ2VJby5oPg0KLQ0KLSNkZWZpbmUgRUZJX1BDSV9IT1NUX0JSSURHRV9SRVNPVVJDRV9BTExPQ0FUSU9OX1BST1RPQ09MX0dVSUQgXA0KLSAgeyAweENGODAzNEJFLCAweDY3NjgsIDB4NGQ4YiwgezB4QjcsMHgzOSwweDdDLDB4Q0UsMHg2OCwweDNBLDB4OUYsMHhCRSB9fQ0KLQ0KLQ0KLXR5cGVkZWYgc3RydWN0IF9FRklfUENJX0hPU1RfQlJJREdFX1JFU09VUkNFX0FMTE9DQVRJT05fUFJPVE9DT0wgRUZJX1BDSV9IT1NUX0JSSURHRV9SRVNPVVJDRV9BTExPQ0FUSU9OX1BST1RPQ09MOw0KLQ0KLQ0KLS8vDQotLy8gRUZJX1BDSV9IT1NUX0JSSURHRV9SRVNPVVJDRV9BTExPQ0FUSU9OX0FUVFJJQlVURVMNCi0vLw0KLQ0KLS8vLyBJZiB0aGlzIGJpdCBpcyBzZXQsIHRoZW4gdGhlIFBDSSBSb290IEJyaWRnZSBkb2VzIG5vdA0KLS8vLyBzdXBwb3J0IHNlcGFyYXRlIHdpbmRvd3MgZm9yIE5vbi1wcmVmZXRjaGFibGUgYW5kIFByZWZldGNoYWJsZQ0KLS8vLyBtZW1vcnkuIEEgUENJIGJ1cyBkcml2ZXIgbmVlZHMgdG8gaW5jbHVkZSByZXF1ZXN0cyBmb3IgUHJlZmV0Y2hhYmxlDQotLy8vIG1lbW9yeSBpbiB0aGUgTm9uLXByZWZldGNoYWJsZSBtZW1vcnkgcG9vbC4NCi0vLy8NCi0jZGVmaW5lIEVGSV9QQ0lfSE9TVF9CUklER0VfQ09NQklORV9NRU1fUE1FTSAgMQ0KLQ0KLS8vLw0KLS8vLyBJZiB0aGlzIGJpdCBpcyBzZXQsIHRoZW4gdGhlIFBDSSBSb290IEJyaWRnZSBzdXBwb3J0cw0KLS8vLyA2NCBiaXQgbWVtb3J5IHdpbmRvd3MuICBJZiB0aGlzIGJpdCBpcyBub3Qgc2V0LA0KLS8vLyB0aGUgUENJIGJ1cyBkcml2ZXIgbmVlZHMgdG8gaW5jbHVkZSByZXF1ZXN0cyBmb3IgNjQgYml0DQotLy8vIG1lbW9yeSBhZGRyZXNzIGluIHRoZSBjb3JyZXNwb25kaW5nIDMyIGJpdCBtZW1vcnkgcG9vbC4NCi0vLy8NCi0jZGVmaW5lIEVGSV9QQ0lfSE9TVF9CUklER0VfTUVNNjRfREVDT0RFICAgMg0KLQ0KLXR5cGVkZWYgVUlOVDY0IEVGSV9SRVNPVVJDRV9BTExPQ0FUSU9OX1NUQVRVUzsNCi0NCi0vLy8NCi0vLy8gVGhlIHJlcXVlc3Qgb2YgdGhpcyByZXNvdXJjZSB0eXBlIGNvdWxkIGJlIGZ1bGZpbGxlZC4NCi0vLy8NCi0jZGVmaW5lIEVGSV9SRVNPVVJDRV9TQVRJU0ZJRUQgICAgICAweDAwMDAwMDAwMDAwMDAwMDBVTEwNCi0NCi0vLy8NCi0vLy8gVGhlIHJlcXVlc3Qgb2YgdGhpcyByZXNvdXJjZSB0eXBlIGNvdWxkIG5vdCBiZSBmdWxmaWxsZWQgZm9yIGl0cw0KLS8vLyBhYnNlbmNlIGluIHRoZSBob3N0IGJyaWRnZSByZXNvdXJjZSBwb29sLg0KLS8vLw0KLSNkZWZpbmUgRUZJX1JFU09VUkNFX05PVF9TQVRJU0ZJRUQgIDB4RkZGRkZGRkZGRkZGRkZGRlVMTA0KLQ0KLS8vDQotLy8gRUZJX1BDSV9IT1NUX0JSSURHRV9SRVNPVVJDRV9BTExPQ0FUSU9OX1BIQVNFDQotLy8NCi10eXBlZGVmIGVudW0gew0KLSAgLy8vDQotICAvLy8gUmVzZXQgdGhlIGhvc3QgYnJpZGdlIFBDSSBhcGVydHVyZXMgYW5kIGludGVybmFsIGRhdGEgc3RydWN0dXJlcy4NCi0gIC8vLyBQQ0kgZW51bWVyYXRvciBzaG91bGQgaXNzdWUgdGhpcyBub3RpZmljYXRpb24gYmVmb3JlIHN0YXJ0aW5nIGZyZXNoDQotICAvLy8gZW51bWVyYXRpb24gcHJvY2Vzcy4gRW51bWVyYXRpb24gY2Fubm90IGJlIHJlc3RhcnRlZCBhZnRlciBzZW5kaW5nDQotICAvLy8gYW55IG90aGVyIG5vdGlmaWNhdGlvbiBzdWNoIGFzIEVmaVBjaUhvc3RCcmlkZ2VCZWdpbkJ1c0FsbG9jYXRpb24uDQotICAvLy8NCi0gIEVmaVBjaUhvc3RCcmlkZ2VCZWdpbkVudW1lcmF0aW9uLA0KLQ0KLSAgLy8vDQotICAvLy8gVGhlIGJ1cyBhbGxvY2F0aW9uIHBoYXNlIGlzIGFib3V0IHRvIGJlZ2luLiBObyBzcGVjaWZpYyBhY3Rpb24NCi0gIC8vLyBpcyByZXF1aXJlZCBoZXJlLiBUaGlzIG5vdGlmaWNhdGlvbiBjYW4gYmUgdXNlZCB0byBwZXJmb3JtIGFueQ0KLSAgLy8vIGNoaXBzZXQgc3BlY2lmaWMgcHJvZ3JhbW1pbmcuICANCi0gIC8vLw0KLSAgRWZpUGNpSG9zdEJyaWRnZUJlZ2luQnVzQWxsb2NhdGlvbiwNCi0NCi0gIC8vLw0KLSAgLy8vIFRoZSBidXMgYWxsb2NhdGlvbiBhbmQgYnVzIHByb2dyYW1taW5nIHBoYXNlIGlzIGNvbXBsZXRlLiBObyBzcGVjaWZpYw0KLSAgLy8vIGFjdGlvbiBpcyByZXF1aXJlZCBoZXJlLiBUaGlzIG5vdGlmaWNhdGlvbiBjYW4gYmUgdXNlZCB0byBwZXJmb3JtIGFueQ0KLSAgLy8vIGNoaXBzZXQgc3BlY2lmaWMgcHJvZ3JhbW1pbmcuICANCi0gIC8vLw0KLSAgRWZpUGNpSG9zdEJyaWRnZUVuZEJ1c0FsbG9jYXRpb24sDQotICANCi0gIC8vLw0KLSAgLy8vIFRoZSByZXNvdXJjZSBhbGxvY2F0aW9uIHBoYXNlIGlzIGFib3V0IHRvIGJlZ2luLk5vIHNwZWNpZmljIGFjdGlvbiBpcw0KLSAgLy8vIHJlcXVpcmVkIGhlcmUuIFRoaXMgbm90aWZpY2F0aW9uIGNhbiBiZSB1c2VkIHRvIHBlcmZvcm0gYW55IGNoaXBzZXQgc3BlY2lmaWMgcHJvZ3JhbW1pbmcuICANCi0gIC8vLw0KLSAgRWZpUGNpSG9zdEJyaWRnZUJlZ2luUmVzb3VyY2VBbGxvY2F0aW9uLA0KLSAgDQotICAvLy8NCi0gIC8vLyBBbGxvY2F0ZSByZXNvdXJjZXMgcGVyIHByZXZpb3VzbHkgc3VibWl0dGVkIHJlcXVlc3RzIGZvciBhbGwgdGhlIFBDSSBSb290DQotICAvLy8gQnJpZGdlcy4gVGhlc2UgcmVzb3VyY2Ugc2V0dGluZ3MgYXJlIHJldHVybmVkIG9uIHRoZSBuZXh0IGNhbGwgdG8NCi0gIC8vLyBHZXRQcm9wb3NlZFJlc291cmNlcygpLiAgDQotICAvLy8NCi0gIEVmaVBjaUhvc3RCcmlkZ2VBbGxvY2F0ZVJlc291cmNlcywNCi0gIA0KLSAgLy8vDQotICAvLy8gUHJvZ3JhbSB0aGUgSG9zdCBCcmlkZ2UgaGFyZHdhcmUgdG8gZGVjb2RlIHByZXZpb3VzbHkgYWxsb2NhdGVkIHJlc291cmNlcw0KLSAgLy8vIChwcm9wb3NlZCByZXNvdXJjZXMpIGZvciBhbGwgdGhlIFBDSSBSb290IEJyaWRnZXMuDQotICAvLy8NCi0gIEVmaVBjaUhvc3RCcmlkZ2VTZXRSZXNvdXJjZXMsDQotICANCi0gIC8vLw0KLSAgLy8vIERlLWFsbG9jYXRlIHByZXZpb3VzbHkgYWxsb2NhdGVkIHJlc291cmNlcyBwcmV2aW91c2x5IGZvciBhbGwgdGhlIFBDSQ0KLSAgLy8vIFJvb3QgQnJpZGdlcyBhbmQgcmVzZXQgdGhlIEkvTyBhbmQgbWVtb3J5IGFwZXJ0dXJlcyB0byBpbml0aWFsIHN0YXRlLiAgDQotICAvLy8NCi0gIEVmaVBjaUhvc3RCcmlkZ2VGcmVlUmVzb3VyY2VzLA0KLSAgDQotICAvLy8NCi0gIC8vLyBUaGUgcmVzb3VyY2UgYWxsb2NhdGlvbiBwaGFzZSBpcyBjb21wbGV0ZWQuICBObyBzcGVjaWZpYyBhY3Rpb24gaXMgcmVxdWlyZWQNCi0gIC8vLyBoZXJlLiBUaGlzIG5vdGlmaWNhdGlvbiBjYW4gYmUgdXNlZCB0byBwZXJmb3JtIGFueSBjaGlwc2V0IHNwZWNpZmljIHByb2dyYW1taW5nLiAgDQotICAvLy8NCi0gIEVmaVBjaUhvc3RCcmlkZ2VFbmRSZXNvdXJjZUFsbG9jYXRpb24NCi19IEVGSV9QQ0lfSE9TVF9CUklER0VfUkVTT1VSQ0VfQUxMT0NBVElPTl9QSEFTRTsNCi0NCi0vLy8NCi0vLy8gRGVmaW5pdGlvbnMgb2YgMiBub3RpZmljYXRpb24gcG9pbnRzLg0KLS8vLw0KLXR5cGVkZWYgZW51bSB7DQotICAvLy8NCi0gIC8vLyBUaGlzIG5vdGlmaWNhdGlvbiBpcyBvbmx5IGFwcGxpY2FibGUgdG8gUENJLVBDSSBicmlkZ2VzIGFuZA0KLSAgLy8vIGluZGljYXRlcyB0aGF0IHRoZSBQQ0kgZW51bWVyYXRvciBpcyBhYm91dCB0byBiZWdpbiBlbnVtZXJhdGluZw0KLSAgLy8vIHRoZSBidXMgYmVoaW5kIHRoZSBQQ0ktUENJIEJyaWRnZS4gVGhpcyBub3RpZmljYXRpb24gaXMgc2VudCBhZnRlcg0KLSAgLy8vIHRoZSBwcmltYXJ5IGJ1cyBudW1iZXIsIHRoZSBzZWNvbmRhcnkgYnVzIG51bWJlciBhbmQgdGhlIHN1Ym9yZGluYXRlDQotICAvLy8gYnVzIG51bWJlciByZWdpc3RlcnMgaW4gdGhlIFBDSS1QQ0kgQnJpZGdlIGFyZSBwcm9ncmFtbWVkIHRvIHZhbGlkDQotICAvLy8gKG5vdCBuZWNlc3NhcnkgZmluYWwpIHZhbHVlcw0KLSAgLy8vDQotICBFZmlQY2lCZWZvcmVDaGlsZEJ1c0VudW1lcmF0aW9uLA0KLQ0KLSAgLy8vDQotICAvLy8gVGhpcyBub3RpZmljYXRpb24gaXMgc2VudCBiZWZvcmUgdGhlIFBDSSBlbnVtZXJhdG9yIHByb2JlcyBCQVIgcmVnaXN0ZXJzDQotICAvLy8gZm9yIGV2ZXJ5IHZhbGlkIFBDSSBmdW5jdGlvbi4gIA0KLSAgLy8vDQotICBFZmlQY2lCZWZvcmVSZXNvdXJjZUNvbGxlY3Rpb24NCi19IEVGSV9QQ0lfQ09OVFJPTExFUl9SRVNPVVJDRV9BTExPQ0FUSU9OX1BIQVNFOw0KLQ0KLS8qKg0KLSAgVGhlc2UgYXJlIHRoZSBub3RpZmljYXRpb25zIGZyb20gdGhlIFBDSSBidXMgZHJpdmVyIHRoYXQgaXQgaXMgYWJvdXQgdG8gZW50ZXIgYSBjZXJ0YWluIHBoYXNlIG9mIHRoZSBQQ0kgDQotICBlbnVtZXJhdGlvbiBwcm9jZXNzLg0KLQ0KLSAgQHBhcmFtICBUaGlzICAgICAgICAgICAgICAgICAgUG9pbnRlciB0byB0aGUgRUZJX1BDSV9IT1NUX0JSSURHRV9SRVNPVVJDRV9BTExPQ0FUSU9OX1BST1RPQ09MIA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2UuDQotICBAcGFyYW0gIFBoYXNlICAgICAgICAgICAgICAgICBUaGUgcGhhc2UgZHVyaW5nIGVudW1lcmF0aW9uDQotDQotICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgbm90aWZpY2F0aW9uIHdhcyBhY2NlcHRlZCB3aXRob3V0IGFueSBlcnJvcnMuDQotICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBUaGUgUGhhc2UgaXMgaW52YWxpZC4NCi0gIEByZXR2YWwgRUZJX05PVF9SRUFEWSAgICAgICAgIFRoaXMgcGhhc2UgY2Fubm90IGJlIGVudGVyZWQgYXQgdGhpcyB0aW1lLiBGb3IgZXhhbXBsZSwgdGhpcyBlcnJvciANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIHZhbGlkIGZvciBhIFBoYXNlIG9mIEVmaVBjaUhvc3RCcmlkZ2VBbGxvY2F0ZVJlc291cmNlcyBpZiANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1Ym1pdFJlc291cmNlcygpIGhhcyBub3QgYmVlbiBjYWxsZWQgZm9yIG9uZSBvciBtb3JlIA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUENJIHJvb3QgYnJpZGdlcyBiZWZvcmUgdGhpcyBjYWxsLg0KLSAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgUHJvZ3JhbW1pbmcgZmFpbGVkIGR1ZSB0byBhIGhhcmR3YXJlIGVycm9yLiBUaGlzIGVycm9yIGlzIHZhbGlkIGZvciANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgUGhhc2Ugb2YgRWZpUGNpSG9zdEJyaWRnZVNldFJlc291cmNlcy4NCi0gIEByZXR2YWwgRUZJX09VVF9PRl9SRVNPVVJDRVMgIFRoZSByZXF1ZXN0IGNvdWxkIG5vdCBiZSBjb21wbGV0ZWQgZHVlIHRvIGEgbGFjayBvZiByZXNvdXJjZXMuIA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBlcnJvciBpcyB2YWxpZCBmb3IgYSBQaGFzZSBvZiBFZmlQY2lIb3N0QnJpZGdlQWxsb2NhdGVSZXNvdXJjZXMNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRoZSBwcmV2aW91c2x5IHN1Ym1pdHRlZCByZXNvdXJjZSByZXF1ZXN0cyBjYW5ub3QgYmUgZnVsZmlsbGVkIG9yIHdlcmUgb25seSANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpYWxseSBmdWxmaWxsZWQNCi0NCi0qKi8NCi10eXBlZGVmDQotRUZJX1NUQVRVUw0KLShFRklBUEkgKkVGSV9QQ0lfSE9TVF9CUklER0VfUkVTT1VSQ0VfQUxMT0NBVElPTl9QUk9UT0NPTF9OT1RJRllfUEhBU0UpKA0KLSAgSU4gRUZJX1BDSV9IT1NUX0JSSURHRV9SRVNPVVJDRV9BTExPQ0FUSU9OX1BST1RPQ09MICAgICAgICAgKlRoaXMsDQotICBJTiBFRklfUENJX0hPU1RfQlJJREdFX1JFU09VUkNFX0FMTE9DQVRJT05fUEhBU0UgICAgICAgICAgICBQaGFzZQ0KLSAgKTsNCi0NCi0NCi0vKioNCi0gIFJldHVybnMgdGhlIGRldmljZSBoYW5kbGUgb2YgdGhlIG5leHQgUENJIHJvb3QgYnJpZGdlIHRoYXQgaXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgaG9zdCBicmlkZ2UuDQotDQotICBAcGFyYW0gIFRoaXMgICAgICAgICAgICAgICAgICBQb2ludGVyIHRvIHRoZSBFRklfUENJX0hPU1RfQlJJREdFX1JFU09VUkNFX0FMTE9DQVRJT05fUFJPVE9DT0wgDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZS4NCi0gIEBwYXJhbSAgUm9vdEJyaWRnZUhhbmRsZSAgICAgIFJldHVybnMgdGhlIGRldmljZSBoYW5kbGUgb2YgdGhlIG5leHQgUENJIHJvb3QgYnJpZGdlLiBPbiBpbnB1dCwgaXQgaG9sZHMgdGhlIA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUm9vdEJyaWRnZUhhbmRsZSB0aGF0IHdhcyByZXR1cm5lZCBieSB0aGUgbW9zdCByZWNlbnQgY2FsbCB0byANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldE5leHRSb290QnJpZGdlKCkuIElmIFJvb3RCcmlkZ2VIYW5kbGUgaXMgTlVMTCBvbiBpbnB1dCwgdGhlIGhhbmRsZSANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgZmlyc3QgUENJIHJvb3QgYnJpZGdlIGlzIHJldHVybmVkLg0KLQ0KLSAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIHJlcXVlc3RlZCBhdHRyaWJ1dGUgaW5mb3JtYXRpb24gd2FzIHJldHVybmVkLg0KLSAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgUm9vdEJyaWRnZUhhbmRsZSBpcyBub3QgYW4gRUZJX0hBTkRMRSB0aGF0IHdhcyByZXR1cm5lZCANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uIGEgcHJldmlvdXMgY2FsbCB0byBHZXROZXh0Um9vdEJyaWRnZSgpLg0KLSAgQHJldHZhbCBFRklfTk9UX0ZPVU5EICAgICAgICAgVGhlcmUgYXJlIG5vIG1vcmUgUENJIHJvb3QgYnJpZGdlIGRldmljZSBoYW5kbGVzLg0KLQ0KLSoqLw0KLXR5cGVkZWYNCi1FRklfU1RBVFVTDQotKEVGSUFQSSAqRUZJX1BDSV9IT1NUX0JSSURHRV9SRVNPVVJDRV9BTExPQ0FUSU9OX1BST1RPQ09MX0dFVF9ORVhUX1JPT1RfQlJJREdFKSgNCi0gIElOIEVGSV9QQ0lfSE9TVF9CUklER0VfUkVTT1VSQ0VfQUxMT0NBVElPTl9QUk9UT0NPTCAgICAgKlRoaXMsDQotICBJTiBPVVQgRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpSb290QnJpZGdlSGFuZGxlDQotICApOw0KLQ0KLQ0KLS8qKg0KLSAgUmV0dXJucyB0aGUgYWxsb2NhdGlvbiBhdHRyaWJ1dGVzIG9mIGEgUENJIHJvb3QgYnJpZGdlLg0KLQ0KLSAgQHBhcmFtICBUaGlzICAgICAgICAgICAgICAgICAgUG9pbnRlciB0byB0aGUgRUZJX1BDSV9IT1NUX0JSSURHRV9SRVNPVVJDRV9BTExPQ0FUSU9OX1BST1RPQ09MIA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2UuDQotICBAcGFyYW0gIFJvb3RCcmlkZ2VIYW5kbGUgICAgICBUaGUgZGV2aWNlIGhhbmRsZSBvZiB0aGUgUENJIHJvb3QgYnJpZGdlIGluIHdoaWNoIHRoZSBjYWxsZXIgaXMgaW50ZXJlc3RlZC4NCi0gIEBwYXJhbSAgQXR0cmlidXRlICAgICAgICAgICAgIFRoZSBwb2ludGVyIHRvIGF0dHJpYnV0ZXMgb2YgdGhlIFBDSSByb290IGJyaWRnZS4NCi0NCi0gIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSByZXF1ZXN0ZWQgYXR0cmlidXRlIGluZm9ybWF0aW9uIHdhcyByZXR1cm5lZC4NCi0gIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIFJvb3RCcmlkZ2VIYW5kbGUgaXMgbm90IGEgdmFsaWQgcm9vdCBicmlkZ2UgaGFuZGxlLg0KLSAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgQXR0cmlidXRlcyBpcyBOVUxMLg0KLQ0KLSoqLw0KLXR5cGVkZWYNCi1FRklfU1RBVFVTDQotKEVGSUFQSSAqRUZJX1BDSV9IT1NUX0JSSURHRV9SRVNPVVJDRV9BTExPQ0FUSU9OX1BST1RPQ09MX0dFVF9BVFRSSUJVVEVTKSgNCi0gIElOIEVGSV9QQ0lfSE9TVF9CUklER0VfUkVTT1VSQ0VfQUxMT0NBVElPTl9QUk9UT0NPTCAgICAgICAgICAgKlRoaXMsDQotICBJTiAgRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJvb3RCcmlkZ2VIYW5kbGUsDQotICBPVVQgVUlOVDY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpBdHRyaWJ1dGVzDQotICApOw0KLQ0KLQ0KLS8qKg0KLSAgU2V0cyB1cCB0aGUgc3BlY2lmaWVkIFBDSSByb290IGJyaWRnZSBmb3IgdGhlIGJ1cyBlbnVtZXJhdGlvbiBwcm9jZXNzLg0KLQ0KLSAgQHBhcmFtICBUaGlzICAgICAgICAgICAgICAgICAgUG9pbnRlciB0byB0aGUgRUZJX1BDSV9IT1NUX0JSSURHRV9SRVNPVVJDRV9BTExPQ0FUSU9OX1BST1RPQ09MIA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2UuDQotICBAcGFyYW0gIFJvb3RCcmlkZ2VIYW5kbGUgICAgICBUaGUgUENJIHJvb3QgYnJpZGdlIHRvIGJlIHNldCB1cC4NCi0gIEBwYXJhbSAgQ29uZmlndXJhdGlvbiAgICAgICAgIFBvaW50ZXIgdG8gdGhlIHBvaW50ZXIgdG8gdGhlIFBDSSBidXMgcmVzb3VyY2UgZGVzY3JpcHRvci4NCi0NCi0gIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSBQQ0kgcm9vdCBicmlkZ2Ugd2FzIHNldCB1cCBhbmQgdGhlIGJ1cyByYW5nZSB3YXMgcmV0dXJuZWQgaW4gDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb25maWd1cmF0aW9uLg0KLSAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgUm9vdEJyaWRnZUhhbmRsZSBpcyBub3QgYSB2YWxpZCByb290IGJyaWRnZSBoYW5kbGUuDQotICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBQcm9ncmFtbWluZyBmYWlsZWQgZHVlIHRvIGEgaGFyZHdhcmUgZXJyb3IuDQotICBAcmV0dmFsIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICBUaGUgcmVxdWVzdCBjb3VsZCBub3QgYmUgY29tcGxldGVkIGR1ZSB0byBhIGxhY2sgb2YgcmVzb3VyY2VzLg0KLQ0KLSoqLw0KLXR5cGVkZWYNCi1FRklfU1RBVFVTDQotKEVGSUFQSSAqRUZJX1BDSV9IT1NUX0JSSURHRV9SRVNPVVJDRV9BTExPQ0FUSU9OX1BST1RPQ09MX1NUQVJUX0JVU19FTlVNRVJBVElPTikoDQotICBJTiBFRklfUENJX0hPU1RfQlJJREdFX1JFU09VUkNFX0FMTE9DQVRJT05fUFJPVE9DT0wgICAgICAgICAgICpUaGlzLA0KLSAgSU4gIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSb290QnJpZGdlSGFuZGxlLA0KLSAgT1VUIFZPSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKkNvbmZpZ3VyYXRpb24NCi0gICk7DQotDQotDQotLyoqDQotICBQcm9ncmFtcyB0aGUgUENJIHJvb3QgYnJpZGdlIGhhcmR3YXJlIHNvIHRoYXQgaXQgZGVjb2RlcyB0aGUgc3BlY2lmaWVkIFBDSSBidXMgcmFuZ2UuDQotDQotICBAcGFyYW0gIFRoaXMgICAgICAgICAgICAgICAgICBQb2ludGVyIHRvIHRoZSBFRklfUENJX0hPU1RfQlJJREdFX1JFU09VUkNFX0FMTE9DQVRJT05fUFJPVE9DT0wNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLiAgDQotICBAcGFyYW0gIFJvb3RCcmlkZ2VIYW5kbGUgICAgICBUaGUgUENJIHJvb3QgYnJpZGdlIHdob3NlIGJ1cyByYW5nZSBpcyB0byBiZSBwcm9ncmFtbWVkLg0KLSAgQHBhcmFtICBDb25maWd1cmF0aW9uICAgICAgICAgVGhlIHBvaW50ZXIgdG8gdGhlIFBDSSBidXMgcmVzb3VyY2UgZGVzY3JpcHRvci4uDQotDQotICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgYnVzIHJhbmdlIGZvciB0aGUgUENJIHJvb3QgYnJpZGdlIHdhcyBwcm9ncmFtbWVkLg0KLSAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgUm9vdEJyaWRnZUhhbmRsZSBpcyBub3QgYSB2YWxpZCByb290IGJyaWRnZSBoYW5kbGUuDQotICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBDb25maWd1cmF0aW9uIGlzIE5VTEwNCi0gIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIENvbmZpZ3VyYXRpb24gZG9lcyBub3QgcG9pbnQgdG8gYSB2YWxpZCBBQ1BJICgyLjAgJiAzLjApIA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2UgZGVzY3JpcHRvci4NCi0gIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIENvbmZpZ3VyYXRpb24gZG9lcyBub3QgaW5jbHVkZSBhIHZhbGlkIEFDUEkgMi4wIGJ1cyByZXNvdXJjZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvci4NCi0gIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIENvbmZpZ3VyYXRpb24gaW5jbHVkZXMgdmFsaWQgQUNQSSAoMi4wICYgMy4wKSByZXNvdXJjZSANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3JzIG90aGVyIHRoYW4gYnVzIGRlc2NyaXB0b3JzLg0KLSAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgQ29uZmlndXJhdGlvbiBjb250YWlucyBvbmUgb3IgbW9yZSBpbnZhbGlkIEFDUEkgcmVzb3VyY2UgDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdG9ycy4NCi0gIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICJBZGRyZXNzIFJhbmdlIE1pbmltdW0iIGlzIGludmFsaWQgZm9yIHRoaXMgcm9vdCBicmlkZ2UuDQotICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAiQWRkcmVzcyBSYW5nZSBMZW5ndGgiIGlzIGludmFsaWQgZm9yIHRoaXMgcm9vdCBicmlkZ2UuDQotICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBQcm9ncmFtbWluZyBmYWlsZWQgZHVlIHRvIGEgaGFyZHdhcmUgZXJyb3IuDQotDQotKiovDQotdHlwZWRlZg0KLUVGSV9TVEFUVVMNCi0oRUZJQVBJICpFRklfUENJX0hPU1RfQlJJREdFX1JFU09VUkNFX0FMTE9DQVRJT05fUFJPVE9DT0xfU0VUX0JVU19OVU1CRVJTKSgNCi0gIElOIEVGSV9QQ0lfSE9TVF9CUklER0VfUkVTT1VSQ0VfQUxMT0NBVElPTl9QUk9UT0NPTCAgICAgICAgICAqVGhpcywNCi0gIElOIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSb290QnJpZGdlSGFuZGxlLA0KLSAgSU4gVk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpDb25maWd1cmF0aW9uDQotICApOw0KLQ0KLQ0KLS8qKg0KLSAgU3VibWl0cyB0aGUgSS9PIGFuZCBtZW1vcnkgcmVzb3VyY2UgcmVxdWlyZW1lbnRzIGZvciB0aGUgc3BlY2lmaWVkIFBDSSByb290IGJyaWRnZS4NCi0NCi0gIEBwYXJhbSAgVGhpcyAgICAgICAgICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIEVGSV9QQ0lfSE9TVF9CUklER0VfUkVTT1VSQ0VfQUxMT0NBVElPTl9QUk9UT0NPTCANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLg0KLSAgQHBhcmFtICBSb290QnJpZGdlSGFuZGxlICAgICAgVGhlIFBDSSByb290IGJyaWRnZSB3aG9zZSBJL08gYW5kIG1lbW9yeSByZXNvdXJjZSByZXF1aXJlbWVudHMgYXJlIGJlaW5nIA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VibWl0dGVkLg0KLSAgQHBhcmFtICBDb25maWd1cmF0aW9uICAgICAgICAgVGhlIHBvaW50ZXIgdG8gdGhlIFBDSSBJL08gYW5kIFBDSSBtZW1vcnkgcmVzb3VyY2UgZGVzY3JpcHRvci4NCi0NCi0gIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSBJL08gYW5kIG1lbW9yeSByZXNvdXJjZSByZXF1ZXN0cyBmb3IgYSBQQ0kgcm9vdCBicmlkZ2Ugd2VyZSANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY2VwdGVkLg0KLSAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgUm9vdEJyaWRnZUhhbmRsZSBpcyBub3QgYSB2YWxpZCByb290IGJyaWRnZSBoYW5kbGUuDQotICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBDb25maWd1cmF0aW9uIGlzIE5VTEwuDQotICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBDb25maWd1cmF0aW9uIGRvZXMgbm90IHBvaW50IHRvIGEgdmFsaWQgQUNQSSAoMi4wICYgMy4wKSANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlIGRlc2NyaXB0b3IuDQotICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBDb25maWd1cmF0aW9uIGluY2x1ZGVzIHJlcXVlc3RzIGZvciBvbmUgb3IgbW9yZSByZXNvdXJjZSANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVzIHRoYXQgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBQQ0kgcm9vdCBicmlkZ2UuIFRoaXMgZXJyb3Igd2lsbCANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhcHBlbiBpZiB0aGUgY2FsbGVyIGRpZCBub3QgY29tYmluZSByZXNvdXJjZXMgYWNjb3JkaW5nIHRvIA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0cmlidXRlcyB0aGF0IHdlcmUgcmV0dXJuZWQgYnkgR2V0QWxsb2NBdHRyaWJ1dGVzKCkuDQotICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAiQWRkcmVzcyBSYW5nZSBNYXhpbXVtIiBpcyBpbnZhbGlkLg0KLSAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgIkFkZHJlc3MgUmFuZ2UgTGVuZ3RoIiBpcyBpbnZhbGlkIGZvciB0aGlzIFBDSSByb290IGJyaWRnZS4NCi0gIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICJBZGRyZXNzIFNwYWNlIEdyYW51bGFyaXR5IiBpcyBpbnZhbGlkIGZvciB0aGlzIFBDSSByb290IGJyaWRnZS4NCi0gIA0KLSoqLw0KLXR5cGVkZWYNCi1FRklfU1RBVFVTDQotKEVGSUFQSSAqRUZJX1BDSV9IT1NUX0JSSURHRV9SRVNPVVJDRV9BTExPQ0FUSU9OX1BST1RPQ09MX1NVQk1JVF9SRVNPVVJDRVMpKA0KLSAgSU4gRUZJX1BDSV9IT1NUX0JSSURHRV9SRVNPVVJDRV9BTExPQ0FUSU9OX1BST1RPQ09MICAgICAgICAgICpUaGlzLA0KLSAgSU4gRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJvb3RCcmlkZ2VIYW5kbGUsDQotICBJTiBWT0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKkNvbmZpZ3VyYXRpb24NCi0gICk7DQotDQotDQotLyoqDQotICBSZXR1cm5zIHRoZSBwcm9wb3NlZCByZXNvdXJjZSBzZXR0aW5ncyBmb3IgdGhlIHNwZWNpZmllZCBQQ0kgcm9vdCBicmlkZ2UuDQotDQotICBAcGFyYW0gIFRoaXMgICAgICAgICAgICAgICAgICBQb2ludGVyIHRvIHRoZSBFRklfUENJX0hPU1RfQlJJREdFX1JFU09VUkNFX0FMTE9DQVRJT05fUFJPVE9DT0wgDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZS4NCi0gIEBwYXJhbSAgUm9vdEJyaWRnZUhhbmRsZSAgICAgIFRoZSBQQ0kgcm9vdCBicmlkZ2UgaGFuZGxlLg0KLSAgQHBhcmFtICBDb25maWd1cmF0aW9uICAgICAgICAgVGhlIHBvaW50ZXIgdG8gdGhlIHBvaW50ZXIgdG8gdGhlIFBDSSBJL08gYW5kIG1lbW9yeSByZXNvdXJjZSBkZXNjcmlwdG9yLg0KLQ0KLSAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIHJlcXVlc3RlZCBwYXJhbWV0ZXJzIHdlcmUgcmV0dXJuZWQuDQotICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBSb290QnJpZGdlSGFuZGxlIGlzIG5vdCBhIHZhbGlkIHJvb3QgYnJpZGdlIGhhbmRsZS4NCi0gIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgIFByb2dyYW1taW5nIGZhaWxlZCBkdWUgdG8gYSBoYXJkd2FyZSBlcnJvci4NCi0gIEByZXR2YWwgRUZJX09VVF9PRl9SRVNPVVJDRVMgIFRoZSByZXF1ZXN0IGNvdWxkIG5vdCBiZSBjb21wbGV0ZWQgZHVlIHRvIGEgbGFjayBvZiByZXNvdXJjZXMuDQotDQotKiovDQotdHlwZWRlZg0KLUVGSV9TVEFUVVMNCi0oRUZJQVBJICpFRklfUENJX0hPU1RfQlJJREdFX1JFU09VUkNFX0FMTE9DQVRJT05fUFJPVE9DT0xfR0VUX1BST1BPU0VEX1JFU09VUkNFUykoDQotICBJTiBFRklfUENJX0hPU1RfQlJJREdFX1JFU09VUkNFX0FMTE9DQVRJT05fUFJPVE9DT0wgICAgICAgICAgICpUaGlzLA0KLSAgSU4gIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSb290QnJpZGdlSGFuZGxlLA0KLSAgT1VUIFZPSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKkNvbmZpZ3VyYXRpb24NCi0gICk7DQotDQotDQotDQotLyoqDQotICBQcm92aWRlcyB0aGUgaG9va3MgZnJvbSB0aGUgUENJIGJ1cyBkcml2ZXIgdG8gZXZlcnkgUENJIGNvbnRyb2xsZXIgKGRldmljZS9mdW5jdGlvbikgYXQgdmFyaW91cyANCi0gIHN0YWdlcyBvZiB0aGUgUENJIGVudW1lcmF0aW9uIHByb2Nlc3MgdGhhdCBhbGxvdyB0aGUgaG9zdCBicmlkZ2UgZHJpdmVyIHRvIHByZWluaXRpYWxpemUgaW5kaXZpZHVhbCANCi0gIFBDSSBjb250cm9sbGVycyBiZWZvcmUgZW51bWVyYXRpb24uDQotDQotICBAcGFyYW0gIFRoaXMgICAgICAgICAgICAgICAgICBQb2ludGVyIHRvIHRoZSBFRklfUENJX0hPU1RfQlJJREdFX1JFU09VUkNFX0FMTE9DQVRJT05fUFJPVE9DT0wgaW5zdGFuY2UuDQotICBAcGFyYW0gIFJvb3RCcmlkZ2VIYW5kbGUgICAgICBUaGUgYXNzb2NpYXRlZCBQQ0kgcm9vdCBicmlkZ2UgaGFuZGxlLg0KLSAgQHBhcmFtICBQY2lBZGRyZXNzICAgICAgICAgICAgVGhlIGFkZHJlc3Mgb2YgdGhlIFBDSSBkZXZpY2Ugb24gdGhlIFBDSSBidXMuDQotICBAcGFyYW0gIFBoYXNlICAgICAgICAgICAgICAgICBUaGUgcGhhc2Ugb2YgdGhlIFBDSSBkZXZpY2UgZW51bWVyYXRpb24uDQotDQotICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgcmVxdWVzdGVkIHBhcmFtZXRlcnMgd2VyZSByZXR1cm5lZC4NCi0gIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIFJvb3RCcmlkZ2VIYW5kbGUgaXMgbm90IGEgdmFsaWQgcm9vdCBicmlkZ2UgaGFuZGxlLg0KLSAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgUGhhc2UgaXMgbm90IGEgdmFsaWQgcGhhc2UgdGhhdCBpcyBkZWZpbmVkIGluIA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUZJX1BDSV9DT05UUk9MTEVSX1JFU09VUkNFX0FMTE9DQVRJT05fUEhBU0UuDQotICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBQcm9ncmFtbWluZyBmYWlsZWQgZHVlIHRvIGEgaGFyZHdhcmUgZXJyb3IuIFRoZSBQQ0kgZW51bWVyYXRvciANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZCBub3QgZW51bWVyYXRlIHRoaXMgZGV2aWNlLCBpbmNsdWRpbmcgaXRzIGNoaWxkIGRldmljZXMgaWYgaXQgaXMgDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIFBDSS10by1QQ0kgYnJpZGdlLg0KLQ0KLSoqLw0KLXR5cGVkZWYNCi1FRklfU1RBVFVTDQotKEVGSUFQSSAqRUZJX1BDSV9IT1NUX0JSSURHRV9SRVNPVVJDRV9BTExPQ0FUSU9OX1BST1RPQ09MX1BSRVBST0NFU1NfQ09OVFJPTExFUikoDQotICBJTiBFRklfUENJX0hPU1RfQlJJREdFX1JFU09VUkNFX0FMTE9DQVRJT05fUFJPVE9DT0wgICAgICAgICAgICAqVGhpcywNCi0gIElOICBFRklfSEFORExFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJvb3RCcmlkZ2VIYW5kbGUsDQotICBJTiAgRUZJX1BDSV9ST09UX0JSSURHRV9JT19QUk9UT0NPTF9QQ0lfQUREUkVTUyAgICAgICAgICAgICAgICBQY2lBZGRyZXNzLA0KLSAgSU4gIEVGSV9QQ0lfQ09OVFJPTExFUl9SRVNPVVJDRV9BTExPQ0FUSU9OX1BIQVNFICAgICAgICAgICAgICAgUGhhc2UNCi0gICk7DQotDQotLy8vDQotLy8vIFByb3ZpZGVzIHRoZSBiYXNpYyBpbnRlcmZhY2VzIHRvIGFic3RyYWN0IGEgUENJIGhvc3QgYnJpZGdlIHJlc291cmNlIGFsbG9jYXRpb24uDQotLy8vDQotc3RydWN0IF9FRklfUENJX0hPU1RfQlJJREdFX1JFU09VUkNFX0FMTE9DQVRJT05fUFJPVE9DT0wgew0KLSAgLy8vDQotICAvLy8gVGhlIG5vdGlmaWNhdGlvbiBmcm9tIHRoZSBQQ0kgYnVzIGVudW1lcmF0b3IgdGhhdCBpdCBpcyBhYm91dCB0byBlbnRlcg0KLSAgLy8vIGEgY2VydGFpbiBwaGFzZSBkdXJpbmcgdGhlIGVudW1lcmF0aW9uIHByb2Nlc3MuDQotICAvLy8NCi0gIEVGSV9QQ0lfSE9TVF9CUklER0VfUkVTT1VSQ0VfQUxMT0NBVElPTl9QUk9UT0NPTF9OT1RJRllfUEhBU0UgICAgICAgICAgIE5vdGlmeVBoYXNlOw0KLSAgDQotICAvLy8NCi0gIC8vLyBSZXRyaWV2ZXMgdGhlIGRldmljZSBoYW5kbGUgZm9yIHRoZSBuZXh0IFBDSSByb290IGJyaWRnZSB0aGF0IGlzIHByb2R1Y2VkIGJ5IHRoZQ0KLSAgLy8vIGhvc3QgYnJpZGdlIHRvIHdoaWNoIHRoaXMgaW5zdGFuY2Ugb2YgdGhlIEVGSV9QQ0lfSE9TVF9CUklER0VfUkVTT1VSQ0VfQUxMT0NBVElPTl9QUk9UT0NPTCBpcyBhdHRhY2hlZC4gIA0KLSAgLy8vDQotICBFRklfUENJX0hPU1RfQlJJREdFX1JFU09VUkNFX0FMTE9DQVRJT05fUFJPVE9DT0xfR0VUX05FWFRfUk9PVF9CUklER0UgICBHZXROZXh0Um9vdEJyaWRnZTsNCi0gIA0KLSAgLy8vDQotICAvLy8gUmV0cmlldmVzIHRoZSBhbGxvY2F0aW9uLXJlbGF0ZWQgYXR0cmlidXRlcyBvZiBhIFBDSSByb290IGJyaWRnZS4NCi0gIC8vLw0KLSAgRUZJX1BDSV9IT1NUX0JSSURHRV9SRVNPVVJDRV9BTExPQ0FUSU9OX1BST1RPQ09MX0dFVF9BVFRSSUJVVEVTICAgICAgICAgR2V0QWxsb2NBdHRyaWJ1dGVzOw0KLSAgDQotICAvLy8NCi0gIC8vLyBTZXRzIHVwIGEgUENJIHJvb3QgYnJpZGdlIGZvciBidXMgZW51bWVyYXRpb24uDQotICAvLy8NCi0gIEVGSV9QQ0lfSE9TVF9CUklER0VfUkVTT1VSQ0VfQUxMT0NBVElPTl9QUk9UT0NPTF9TVEFSVF9CVVNfRU5VTUVSQVRJT04gIFN0YXJ0QnVzRW51bWVyYXRpb247DQotICANCi0gIC8vLw0KLSAgLy8vIFNldHMgdXAgdGhlIFBDSSByb290IGJyaWRnZSBzbyB0aGF0IGl0IGRlY29kZXMgYSBzcGVjaWZpYyByYW5nZSBvZiBidXMgbnVtYmVycy4NCi0gIC8vLw0KLSAgRUZJX1BDSV9IT1NUX0JSSURHRV9SRVNPVVJDRV9BTExPQ0FUSU9OX1BST1RPQ09MX1NFVF9CVVNfTlVNQkVSUyAgICAgICAgU2V0QnVzTnVtYmVyczsNCi0gIA0KLSAgLy8vDQotICAvLy8gU3VibWl0cyB0aGUgcmVzb3VyY2UgcmVxdWlyZW1lbnRzIGZvciB0aGUgc3BlY2lmaWVkIFBDSSByb290IGJyaWRnZS4NCi0gIC8vLw0KLSAgRUZJX1BDSV9IT1NUX0JSSURHRV9SRVNPVVJDRV9BTExPQ0FUSU9OX1BST1RPQ09MX1NVQk1JVF9SRVNPVVJDRVMgICAgICAgU3VibWl0UmVzb3VyY2VzOw0KLSAgDQotICAvLy8NCi0gIC8vLyBSZXR1cm5zIHRoZSBwcm9wb3NlZCByZXNvdXJjZSBhc3NpZ25tZW50IGZvciB0aGUgc3BlY2lmaWVkIFBDSSByb290IGJyaWRnZXMuDQotICAvLy8NCi0gIEVGSV9QQ0lfSE9TVF9CUklER0VfUkVTT1VSQ0VfQUxMT0NBVElPTl9QUk9UT0NPTF9HRVRfUFJPUE9TRURfUkVTT1VSQ0VTIEdldFByb3Bvc2VkUmVzb3VyY2VzOw0KLSAgDQotICAvLy8NCi0gIC8vLyBQcm92aWRlcyBob29rcyBmcm9tIHRoZSBQQ0kgYnVzIGRyaXZlciB0byBldmVyeSBQQ0kgY29udHJvbGxlcg0KLSAgLy8vIChkZXZpY2UvZnVuY3Rpb24pIGF0IHZhcmlvdXMgc3RhZ2VzIG9mIHRoZSBQQ0kgZW51bWVyYXRpb24gcHJvY2VzcyB0aGF0DQotICAvLy8gYWxsb3cgdGhlIGhvc3QgYnJpZGdlIGRyaXZlciB0byBwcmVpbml0aWFsaXplIGluZGl2aWR1YWwgUENJIGNvbnRyb2xsZXJzDQotICAvLy8gYmVmb3JlIGVudW1lcmF0aW9uLiAgDQotICAvLy8NCi0gIEVGSV9QQ0lfSE9TVF9CUklER0VfUkVTT1VSQ0VfQUxMT0NBVElPTl9QUk9UT0NPTF9QUkVQUk9DRVNTX0NPTlRST0xMRVIgIFByZXByb2Nlc3NDb250cm9sbGVyOw0KLX07DQotDQotZXh0ZXJuIEVGSV9HVUlEIGdFZmlQY2lIb3N0QnJpZGdlUmVzb3VyY2VBbGxvY2F0aW9uUHJvdG9jb2xHdWlkOw0KLQ0KLSNlbmRpZg0KZGlmZiAtLWdpdCBhL0ludGVsRnJhbWV3b3JrUGtnL0luY2x1ZGUvUHJvdG9jb2wvUGNpSG90UGx1Z0luaXQuaCBiL0ludGVsRnJhbWV3b3JrUGtnL0luY2x1ZGUvUHJvdG9jb2wvUGNpSG90UGx1Z0luaXQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjg0YjZjYS4uMDAwMDAwMAotLS0gYS9JbnRlbEZyYW1ld29ya1BrZy9JbmNsdWRlL1Byb3RvY29sL1BjaUhvdFBsdWdJbml0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMTQgKzAsMCBAQAotLyoqIEBmaWxlDQotICBUaGlzIGZpbGUgZGVjbGFyZXMgRUZJIFBDSSBIb3QgUGx1ZyBJbml0IFByb3RvY29sLg0KLSAgVGhpcyBwcm90b2NvbCBwcm92aWRlcyB0aGUgbmVjZXNzYXJ5IGZ1bmN0aW9uYWxpdHkgdG8gaW5pdGlhbGl6ZSB0aGUgSG90IFBsdWcgQ29udHJvbGxlcnMgKEhQQ3MpIGFuZA0KLSAgdGhlIGJ1c2VzIHRoYXQgdGhleSBjb250cm9sLiBUaGlzIHByb3RvY29sIGFsc28gcHJvdmlkZXMgaW5mb3JtYXRpb24gcmVnYXJkaW5nIHJlc291cmNlIHBhZGRpbmcuDQotDQotICBDb3B5cmlnaHQgKGMpIDIwMDcgLSAyMDA5LCBJbnRlbCBDb3Jwb3JhdGlvbg0KLSAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KLSAgYXJlIGxpY2Vuc2VkIGFuZCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEJTRCBMaWNlbnNlDQotICB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbi4gIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgbWF5IGJlIGZvdW5kIGF0DQotICBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vuc2UucGhwDQotDQotICBUSEUgUFJPR1JBTSBJUyBESVNUUklCVVRFRCBVTkRFUiBUSEUgQlNEIExJQ0VOU0UgT04gQU4gIkFTIElTIiBCQVNJUywNCi0gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQuDQotDQotICBAcGFyIFJldmlzaW9uIFJlZmVyZW5jZToNCi0gIFRoaXMgcHJvdG9jb2wgaXMgZGVmaW5lZCBpbiBGcmFtZXdvcmsgb2YgRUZJIEhvdCBQbHVnIFBjaSBJbml0aWFsaXphdGlvbiBQcm90b2NvbCBTcGVjDQotICBWZXJzaW9uIDAuOQ0KLQ0KLSoqLw0KLQ0KLSNpZm5kZWYgX0VGSV9QQ0lfSE9UX1BMVUdfSU5JVF9IXw0KLSNkZWZpbmUgX0VGSV9QQ0lfSE9UX1BMVUdfSU5JVF9IXw0KLQ0KLQ0KLS8vLw0KLS8vLyBHbG9iYWwgSUQgZm9yIHRoZSBQQ0kgSG90IFBsdWcgUHJvdG9jb2wNCi0vLy8NCi0jZGVmaW5lIEVGSV9QQ0lfSE9UX1BMVUdfSU5JVF9QUk9UT0NPTF9HVUlEIFwNCi0gIHsgXA0KLSAgICAweGFhMGU4YmMxLCAweGRhYmMsIDB4NDZiMCwgezB4YTgsIDB4NDQsIDB4MzcsIDB4YjgsIDB4MTYsIDB4OWIsIDB4MmIsIDB4ZWEgfSBcDQotICB9DQotDQotdHlwZWRlZiBzdHJ1Y3QgX0VGSV9QQ0lfSE9UX1BMVUdfSU5JVF9QUk9UT0NPTCBFRklfUENJX0hPVF9QTFVHX0lOSVRfUFJPVE9DT0w7DQotDQotLy8vDQotLy8vIEN1cnJlbnQgc3RhdGUgb2YgYW4gSFBDDQotLy8vDQotdHlwZWRlZiBVSU5UMTYgRUZJX0hQQ19TVEFURTsNCi0NCi0vLy8NCi0vLy8gVGhlIEhQQyBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiB3YXMgY2FsbGVkIGFuZCB0aGUgSFBDIGNvbXBsZXRlZCANCi0vLy8gaW5pdGlhbGl6YXRpb24sIGJ1dCBpdCB3YXMgbm90IGVuYWJsZWQgZm9yIHNvbWUgcmVhc29uLiBUaGUgSFBDIG1heSBiZSANCi0vLy8gZGlzYWJsZWQgaW4gaGFyZHdhcmUsIG9yIGl0IG1heSBiZSBkaXNhYmxlZCBkdWUgdG8gdXNlciBwcmVmZXJlbmNlcywgDQotLy8vIGhhcmR3YXJlIGZhaWx1cmUsIG9yIG90aGVyIHJlYXNvbnMuIE5vIHJlc291cmNlIHBhZGRpbmcgaXMgcmVxdWlyZWQuDQotLy8vDQotI2RlZmluZSAgRUZJX0hQQ19TVEFURV9JTklUSUFMSVpFRCAgICAweDAxDQotDQotLy8vDQotLy8vIFRoZSBIUEMgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gd2FzIGNhbGxlZCwgdGhlIEhQQyBjb21wbGV0ZWQgDQotLy8vIGluaXRpYWxpemF0aW9uLCBhbmQgaXQgd2FzIGVuYWJsZWQuIFJlc291cmNlIHBhZGRpbmcgaXMgcmVxdWlyZWQuDQotLy8vDQotI2RlZmluZSAgRUZJX0hQQ19TVEFURV9FTkFCTEVEICAgICAgICAweDAyDQotDQotLy8vDQotLy8vIExvY2F0aW9uIGRlZmluaXRpb24gZm9yIFBDSSBIb3QgUGx1ZyBDb250cm9sbGVyDQotLy8vDQotdHlwZWRlZiBzdHJ1Y3R7DQotICAvLy8NCi0gIC8vLyBUaGUgZGV2aWNlIHBhdGggdG8gdGhlIFJvb3QgSFBDDQotICAvLy8NCi0gIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAgKkhwY0RldmljZVBhdGg7DQotICAvLy8NCi0gIC8vLyBUaGUgZGV2aWNlIHBhdGggdG8gdGhlIEhvdCBQbHVnIEJ1cyAoSFBCKSB0aGF0IGlzIGNvbnRyb2xsZWQgYnkgDQotICAvLy8gdGhlIHJvb3QgSFBDLg0KLSAgLy8vDQotICBFRklfREVWSUNFX1BBVEhfUFJPVE9DT0wgICpIcGJEZXZpY2VQYXRoOw0KLX0gRUZJX0hQQ19MT0NBVElPTjsNCi0NCi0NCi0vLy8NCi0vLy8gRGVzY3JpYmVzIGhvdyByZXNvdXJjZSBwYWRkaW5nIHNob3VsZCBiZSBhcHBsaWVkDQotLy8vDQotdHlwZWRlZiBlbnVtew0KLSAgRWZpUGFkZGluZ1BjaUJ1cywNCi0gIEVmaVBhZGRpbmdQY2lSb290QnJpZGdlDQotfSBFRklfSFBDX1BBRERJTkdfQVRUUklCVVRFUzsNCi0NCi0vKioNCi0gIFJldHVybnMgYSBsaXN0IG9mIHJvb3QgSG90IFBsdWcgQ29udHJvbGxlcnMgKEhQQ3MpIHRoYXQgcmVxdWlyZSBpbml0aWFsaXphdGlvbg0KLSAgZHVyaW5nIHRoZSBib290IHByb2Nlc3MuDQotDQotICBUaGlzIHByb2NlZHVyZSByZXR1cm5zIGEgbGlzdCBvZiByb290IEhQQ3MuIFRoZSBQQ0kgYnVzIGRyaXZlciBtdXN0IGluaXRpYWxpemUgdGhlc2UgY29udHJvbGxlcnMgDQotICBkdXJpbmcgdGhlIGJvb3QgcHJvY2Vzcy4gVGhlIFBDSSBidXMgZHJpdmVyIG1heSBvciBtYXkgbm90IGJlIGFibGUgdG8gZGV0ZWN0IHRoZXNlIEhQQ3MuIElmIHRoZSANCi0gIHBsYXRmb3JtIGluY2x1ZGVzIGEgUENJLXRvLUNhcmRCdXMgYnJpZGdlLCBpdCBjYW4gYmUgaW5jbHVkZWQgaW4gdGhpcyBsaXN0IGlmIGl0IHJlcXVpcmVzIGluaXRpYWxpemF0aW9uLiANCi0gIFRoZSBIcGNMaXN0IG11c3QgYmUgc2VsZiBjb25zaXN0ZW50LiBBbiBIUEMgY2Fubm90IGNvbnRyb2wgYW55IG9mIGl0cyBwYXJlbnQgYnVzZXMuIE9ubHkgb25lIEhQQyANCi0gIGNhbiBjb250cm9sIGEgUENJIGJ1cy4gQmVjYXVzZSB0aGlzIGxpc3QgaW5jbHVkZXMgb25seSByb290IEhQQ3MsIG5vIEhQQyBpbiB0aGUgbGlzdCBjYW4gYmUgYSBjaGlsZCBvZiANCi0gIGFub3RoZXIgSFBDLiBUaGlzIHBvbGljeSBtdXN0IGJlIGVuZm9yY2VkIGJ5IHRoZSBFRklfUENJX0hPVF9QTFVHX0lOSVRfUFJPVE9DT0wuIA0KLSAgVGhlIFBDSSBidXMgZHJpdmVyIG1heSBub3QgY2hlY2sgZm9yIHN1Y2ggaW52YWxpZCBjb25kaXRpb25zLiANCi0gIFRoZSBjYWxsZWUgYWxsb2NhdGVzIHRoZSBidWZmZXIgSHBjTGlzdA0KLQ0KLSAgQHBhcmFtICBUaGlzICAgICAgICAgICAgICAgICAgUG9pbnRlciB0byB0aGUgRUZJX1BDSV9IT1RfUExVR19JTklUX1BST1RPQ09MIGluc3RhbmNlLg0KLSAgQHBhcmFtICBIcGNDb3VudCAgICAgICAgICAgICAgVGhlIG51bWJlciBvZiByb290IEhQQ3MgdGhhdCB3ZXJlIHJldHVybmVkLg0KLSAgQHBhcmFtICBIcGNMaXN0ICAgICAgICAgICAgICAgVGhlIGxpc3Qgb2Ygcm9vdCBIUENzLiBIcGNDb3VudCBkZWZpbmVzIHRoZSBudW1iZXIgb2YNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzIGluIHRoaXMgbGlzdC4NCi0NCi0gIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIEhwY0xpc3Qgd2FzIHJldHVybmVkLg0KLSAgQHJldHZhbCBFRklfT1VUX09GX1JFU09VUkNFUyAgSHBjTGlzdCB3YXMgbm90IHJldHVybmVkIGR1ZSB0byBpbnN1ZmZpY2llbnQgcmVzb3VyY2VzLg0KLSAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgSHBjQ291bnQgaXMgTlVMTCBvciBIcGNMaXN0IGlzIE5VTEwuDQotDQotKiovDQotdHlwZWRlZg0KLUVGSV9TVEFUVVMNCi0oRUZJQVBJICpFRklfR0VUX1JPT1RfSFBDX0xJU1QpKA0KLSAgSU4gIEVGSV9QQ0lfSE9UX1BMVUdfSU5JVF9QUk9UT0NPTCAgKlRoaXMsDQotICBPVVQgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAqSHBjQ291bnQsDQotICBPVVQgRUZJX0hQQ19MT0NBVElPTiAgICAgICAgICAgICAgICAqKkhwY0xpc3QNCi0pOw0KLQ0KLS8qKg0KLSAgSW5pdGlhbGl6ZXMgb25lIHJvb3QgSG90IFBsdWcgQ29udHJvbGxlciAoSFBDKS4gVGhpcyBwcm9jZXNzIG1heSBjYXVzZXMNCi0gIGluaXRpYWxpemF0aW9uIG9mIGl0cyBzdWJvcmRpbmF0ZSBidXNlcy4NCi0gIA0KLSAgVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgc3BlY2lmaWVkIEhQQy4gQXQgdGhlIGVuZCBvZiBpbml0aWFsaXphdGlvbiwgdGhlIGhvdC1wbHVnIHNsb3RzIG9yIHNvY2tldHMgDQotICAoY29udHJvbGxlZCBieSB0aGlzIEhQQykgYXJlIHBvd2VyZWQgYW5kIGFyZSBjb25uZWN0ZWQgdG8gdGhlIGJ1cy4gQWxsIHRoZSBuZWNlc3NhcnkgcmVnaXN0ZXJzIGluIHRoZSANCi0gIEhQQyBhcmUgc2V0IHVwLiBGb3IgYSBTdGFuZGFyZCAoUENJKSBIb3QgUGx1ZyBDb250cm9sbGVyIChTSFBDKSwgdGhlIHJlZ2lzdGVycyB0aGF0IG11c3QgYmUgc2V0IHVwIA0KLSAgYXJlIGRlZmluZWQgaW4gdGhlIFBDSSBTdGFuZGFyZCBIb3QgUGx1ZyBDb250cm9sbGVyIGFuZCBTdWJzeXN0ZW0gU3BlY2lmaWNhdGlvbi4NCi0NCi0gIEBwYXJhbSAgVGhpcyAgICAgICAgICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIEVGSV9QQ0lfSE9UX1BMVUdfSU5JVF9QUk9UT0NPTCBpbnN0YW5jZS4NCi0gIEBwYXJhbSAgSHBjRGV2aWNlUGF0aCAgICAgICAgIFRoZSBkZXZpY2UgcGF0aCB0byB0aGUgSFBDIHRoYXQgaXMgYmVpbmcgaW5pdGlhbGl6ZWQuDQotICBAcGFyYW0gIEhwY1BjaUFkZHJlc3MgICAgICAgICBUaGUgYWRkcmVzcyBvZiB0aGUgSFBDIGZ1bmN0aW9uIG9uIHRoZSBQQ0kgYnVzLg0KLSAgQHBhcmFtICBFdmVudCAgICAgICAgICAgICAgICAgVGhlIGV2ZW50IHRoYXQgc2hvdWxkIGJlIHNpZ25hbGVkIHdoZW4gdGhlIEhQQyBpbml0aWFsaXphdGlvbg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgY29tcGxldGUuDQotICBAcGFyYW0gIEhwY1N0YXRlICAgICAgICAgICAgICBUaGUgc3RhdGUgb2YgdGhlIEhQQyBoYXJkd2FyZS4gVGhlIHN0YXRlIGlzIEVGSV9IUENfU1RBVEVfSU5JVElBTElaRUQNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIEVGSV9IUENfU1RBVEVfRU5BQkxFRC4NCi0NCi0gIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIElmIEV2ZW50IGlzIE5VTEwsIHRoZSBzcGVjaWZpYyBIUEMgd2FzIHN1Y2Nlc3NmdWxseQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbGl6ZWQuIElmIEV2ZW50IGlzIG5vdCBOVUxMLCBFdmVudCB3aWxsIGJlIHNpZ25hbGVkIGF0IGEgbGF0ZXIgdGltZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBpbml0aWFsaXphdGlvbiBpcyBjb21wbGV0ZS4NCi0gIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIFRoaXMgaW5zdGFuY2Ugb2YgRUZJX1BDSV9IT1RfUExVR19JTklUX1BST1RPQ09MDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2VzIG5vdCBzdXBwb3J0IHRoZSBzcGVjaWZpZWQgSFBDLg0KLSAgQHJldHZhbCBFRklfT1VUX09GX1JFU09VUkNFUyAgSW5pdGlhbGl6YXRpb24gZmFpbGVkIGR1ZSB0byBpbnN1ZmZpY2llbnQNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlcy4NCi0gIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIEhwY1N0YXRlIGlzIE5VTEwuDQotDQotKiovDQotdHlwZWRlZg0KLUVGSV9TVEFUVVMNCi0oRUZJQVBJICpFRklfSU5JVElBTElaRV9ST09UX0hQQykoDQotICBJTiAgRUZJX1BDSV9IT1RfUExVR19JTklUX1BST1RPQ09MICAgICpUaGlzLA0KLSAgSU4gIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAgICAgICAgICAqSHBjRGV2aWNlUGF0aCwNCi0gIElOICBVSU5UNjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgSHBjUGNpQWRkcmVzcywNCi0gIElOICBFRklfRVZFTlQgICAgICAgICAgICAgICAgICAgICAgICAgRXZlbnQsIE9QVElPTkFMDQotICBPVVQgRUZJX0hQQ19TVEFURSAgICAgICAgICAgICAgICAgICAgICpIcGNTdGF0ZQ0KLSk7DQotDQotLyoqDQotICBSZXR1cm5zIHRoZSByZXNvdXJjZSBwYWRkaW5nIHRoYXQgaXMgcmVxdWlyZWQgYnkgdGhlIFBDSSBidXMgdGhhdCBpcyBjb250cm9sbGVkDQotICBieSB0aGUgc3BlY2lmaWVkIEhvdCBQbHVnIENvbnRyb2xsZXIgKEhQQykuDQotDQotICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHJlc291cmNlIHBhZGRpbmcgdGhhdCBpcyByZXF1aXJlZCBieSB0aGUgUENJIGJ1cyB0aGF0IGlzIGNvbnRyb2xsZWQgYnkgdGhlIA0KLSAgc3BlY2lmaWVkIEhQQy4gVGhpcyBtZW1iZXIgZnVuY3Rpb24gaXMgY2FsbGVkIGZvciBhbGwgdGhlIHJvb3QgSFBDcyBhbmQgbm9ucm9vdCBIUENzIHRoYXQgYXJlIA0KLSAgZGV0ZWN0ZWQgYnkgdGhlIFBDSSBidXMgZW51bWVyYXRvci4gVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBiZWZvcmUgUENJIHJlc291cmNlIGFsbG9jYXRpb24gaXMgDQotICBjb21wbGV0ZWQuIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgYWZ0ZXIgYWxsIHRoZSByb290IEhQQ3MsIHdpdGggdGhlIHBvc3NpYmxlIGV4Y2VwdGlvbiBvZiBhIA0KLSAgUENJLXRvLUNhcmRCdXMgYnJpZGdlLCBoYXZlIGNvbXBsZXRlZCBpbml0aWFsaXphdGlvbi4NCi0NCi0gIEBwYXJhbSAgVGhpcyAgICAgICAgICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIEVGSV9QQ0lfSE9UX1BMVUdfSU5JVF9QUk9UT0NPTCBpbnN0YW5jZS4NCi0gIEBwYXJhbSAgSHBjRGV2aWNlUGF0aCAgICAgICAgIFRoZSBkZXZpY2UgcGF0aCB0byB0aGUgSFBDLg0KLSAgQHBhcmFtICBIcGNQY2lBZGRyZXNzICAgICAgICAgVGhlIGFkZHJlc3Mgb2YgdGhlIEhQQyBmdW5jdGlvbiBvbiB0aGUgUENJIGJ1cy4NCi0gIEBwYXJhbSAgSHBjU3RhdGUgICAgICAgICAgICAgIFRoZSBzdGF0ZSBvZiB0aGUgSFBDIGhhcmR3YXJlLg0KLSAgQHBhcmFtICBQYWRkaW5nICAgICAgICAgICAgICAgVGhlIGFtb3VudCBvZiByZXNvdXJjZSBwYWRkaW5nIHRoYXQgaXMgcmVxdWlyZWQgYnkgdGhlDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQ0kgYnVzIHVuZGVyIHRoZSBjb250cm9sIG9mIHRoZSBzcGVjaWZpZWQgSFBDLg0KLSAgQHBhcmFtICBBdHRyaWJ1dGVzICAgICAgICAgICAgRGVzY3JpYmVzIGhvdyBwYWRkaW5nIGlzIGFjY291bnRlZCBmb3IuIFRoZSBwYWRkaW5nDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyByZXR1cm5lZCBpbiB0aGUgZm9ybSBvZiBBQ1BJIDIuMCByZXNvdXJjZSBkZXNjcmlwdG9ycy4NCi0NCi0gIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSByZXNvdXJjZSBwYWRkaW5nIHdhcyBzdWNjZXNzZnVsbHkgcmV0dXJuZWQuDQotICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICBUaGlzIGluc3RhbmNlIG9mIHRoZSBFRklfUENJX0hPVF9QTFVHX0lOSVRfUFJPVE9DT0wNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvZXMgbm90IHN1cHBvcnQgdGhlIHNwZWNpZmllZCBIUEMuDQotICBAcmV0dmFsIEVGSV9OT1RfUkVBRFkgICAgICAgICBUaGlzIGZ1bmN0aW9uIHdhcyBjYWxsZWQgYmVmb3JlIEhQQyBpbml0aWFsaXphdGlvbiBpcyBjb21wbGV0ZS4NCi0gIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIEhwY1N0YXRlIG9yIFBhZGRpbmcgb3IgQXR0cmlidXRlcyBpcyBOVUxMLg0KLSAgQHJldHZhbCBFRklfT1VUX09GX1JFU09VUkNFUyAgQUNQSSAyLjAgcmVzb3VyY2UgZGVzY3JpcHRvcnMgZm9yIFBhZGRpbmcNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbm5vdCBiZSBhbGxvY2F0ZWQgZHVlIHRvIGluc3VmZmljaWVudCByZXNvdXJjZXMuDQotDQotKiovDQotdHlwZWRlZg0KLUVGSV9TVEFUVVMNCi0oRUZJQVBJICpFRklfR0VUX0hPVF9QTFVHX1BBRERJTkcpKA0KLSAgSU4gIEVGSV9QQ0lfSE9UX1BMVUdfSU5JVF9QUk9UT0NPTCAgICAqVGhpcywNCi0gIElOICBFRklfREVWSUNFX1BBVEhfUFJPVE9DT0wgICAgICAgICAgKkhwY0RldmljZVBhdGgsDQotICBJTiAgVUlOVDY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhwY1BjaUFkZHJlc3MsDQotICBPVVQgRUZJX0hQQ19TVEFURSAgICAgICAgICAgICAgICAgICAgICpIcGNTdGF0ZSwNCi0gIE9VVCBWT0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKipQYWRkaW5nLA0KLSAgT1VUIEVGSV9IUENfUEFERElOR19BVFRSSUJVVEVTICAgICAgICAqQXR0cmlidXRlcw0KLSk7DQotDQotDQotLy8NCi0vLyBQcm90b3R5cGVzIGZvciB0aGUgUENJIEhvdCBQbHVnIEluaXQgUHJvdG9jb2wNCi0vLw0KLQ0KLS8vLw0KLS8vLyBUaGlzIHByb3RvY29sIHByb3ZpZGVzIHRoZSBuZWNlc3NhcnkgZnVuY3Rpb25hbGl0eSB0byBpbml0aWFsaXplIHRoZQ0KLS8vLyBIb3QgUGx1ZyBDb250cm9sbGVycyAoSFBDcykgYW5kIHRoZSBidXNlcyB0aGF0IHRoZXkgY29udHJvbC4gVGhpcyBwcm90b2NvbA0KLS8vLyBhbHNvIHByb3ZpZGVzIGluZm9ybWF0aW9uIHJlZ2FyZGluZyByZXNvdXJjZSBwYWRkaW5nLg0KLS8vLw0KLXN0cnVjdCBfRUZJX1BDSV9IT1RfUExVR19JTklUX1BST1RPQ09MIHsNCi0gIC8vLw0KLSAgLy8vIFJldHVybnMgYSBsaXN0IG9mIHJvb3QgSFBDcyBhbmQgdGhlIGJ1c2VzIHRoYXQgdGhleSBjb250cm9sLg0KLSAgLy8vDQotICBFRklfR0VUX1JPT1RfSFBDX0xJU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2V0Um9vdEhwY0xpc3Q7DQotICANCi0gIC8vLw0KLSAgLy8vIEluaXRpYWxpemVzIHRoZSBzcGVjaWZpZWQgcm9vdCBIUEMuDQotICAvLy8NCi0gIEVGSV9JTklUSUFMSVpFX1JPT1RfSFBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbml0aWFsaXplUm9vdEhwYzsNCi0gIA0KLSAgLy8vDQotICAvLy8gUmV0dXJucyB0aGUgcmVzb3VyY2UgcGFkZGluZyB0aGF0IGlzIHJlcXVpcmVkIGJ5IHRoZSBIUEMuDQotICAvLy8NCi0gIEVGSV9HRVRfSE9UX1BMVUdfUEFERElORyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRSZXNvdXJjZVBhZGRpbmc7DQotfTsNCi0NCi1leHRlcm4gRUZJX0dVSUQgZ0VmaVBjaUhvdFBsdWdJbml0UHJvdG9jb2xHdWlkOw0KLQ0KLSNlbmRpZg0KZGlmZiAtLWdpdCBhL0ludGVsRnJhbWV3b3JrUGtnL0luY2x1ZGUvUHJvdG9jb2wvUGNpUGxhdGZvcm0uaCBiL0ludGVsRnJhbWV3b3JrUGtnL0luY2x1ZGUvUHJvdG9jb2wvUGNpUGxhdGZvcm0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGM0N2VlNi4uMDAwMDAwMAotLS0gYS9JbnRlbEZyYW1ld29ya1BrZy9JbmNsdWRlL1Byb3RvY29sL1BjaVBsYXRmb3JtLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMzMgKzAsMCBAQAotLyoqIEBmaWxlDQotICBUaGlzIGZpbGUgZGVjbGFyZXMgUGxhdGZyb21PcFJvbSBwcm90b2NvbHMgd2hpY2ggcHJvdmlkZXMgdGhlIGludGVyZmFjZSBiZXR3ZWVuIA0KLSAgdGhlIFBDSSBidXMgZHJpdmVyL1BDSSBIb3N0IEJyaWRnZSBSZXNvdXJjZSBBbGxvY2F0aW9uIGRyaXZlciBhbmQgYSBwbGF0Zm9ybS1zcGVjaWZpYyANCi0gIGRyaXZlciB0byBkZXNjcmliZSB0aGUgdW5pcXVlIGZlYXR1cmVzIG9mIGEgcGxhdGZvcm0uIFRoaXMNCi0gIHByb3RvY29sIGlzIG9wdGlvbmFsLg0KLSAgDQotICBDb3B5cmlnaHQgKGMpIDIwMDcgLSAyMDA5LCBJbnRlbCBDb3Jwb3JhdGlvbg0KLSAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KLSAgYXJlIGxpY2Vuc2VkIGFuZCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEJTRCBMaWNlbnNlDQotICB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbi4gIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgbWF5IGJlIGZvdW5kIGF0DQotICBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vuc2UucGhwDQotDQotICBUSEUgUFJPR1JBTSBJUyBESVNUUklCVVRFRCBVTkRFUiBUSEUgQlNEIExJQ0VOU0UgT04gQU4gIkFTIElTIiBCQVNJUywNCi0gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQuDQotDQotICBAcGFyIFJldmlzaW9uIFJlZmVyZW5jZToNCi0gIFRoaXMgcHJvdG9jb2wgaXMgZGVmaW5lZCBpbiBQQ0kgUGxhdGZvcm0gU3VwcG9ydCBTcGVjaWZpY2F0aW9uDQotICBWZXJzaW9uIDAuOQ0KLQ0KLSoqLw0KLQ0KLSNpZm5kZWYgX1BDSV9QTEFURk9STV9IXw0KLSNkZWZpbmUgX1BDSV9QTEFURk9STV9IXw0KLQ0KLSNpbmNsdWRlIDxQcm90b2NvbC9QY2lIb3N0QnJpZGdlUmVzb3VyY2VBbGxvY2F0aW9uLmg+DQotDQotLy8NCi0vLyBQcm90b2NvbCBmb3IgR1VJRC4NCi0vLw0KLQ0KLSNkZWZpbmUgRUZJX1BDSV9QTEFURk9STV9QUk9UT0NPTF9HVUlEIFwNCi17IDB4N2Q3NTI4MCwgMHgyN2Q0LCAweDRkNjksIHsweDkwLCAweGQwLCAweDU2LCAweDQzLCAweGUyLCAweDM4LCAweGIzLCAweDQxfSB9DQotDQotdHlwZWRlZiBzdHJ1Y3QgX0VGSV9QQ0lfUExBVEZPUk1fUFJPVE9DT0wgRUZJX1BDSV9QTEFURk9STV9QUk9UT0NPTDsNCi0NCi10eXBlZGVmICAgIFVJTlQzMiAgIEVGSV9QQ0lfUExBVEZPUk1fUE9MSUNZOw0KLQ0KLS8vDQotLy8gVGhlcmUgYXJlIDQgbGVnYWwgY29tYmluYXRpb25zIG9mIGZvbGxvd2luZyBiaXQgdmFsdWVzOg0KLS8vIEVGSV9SRVNFUlZFX05PTkVfSU9fQUxJQVMsDQotLy8gRUZJX1JFU0VSVkVfSVNBX0lPX0FMSUFTIHwgRUZJX1JFU0VSVkVfVkdBX0lPX0FMSUFTLA0KLS8vIEVGSV9SRVNFUlZFX0lTQV9JT19OT19BTElBUyB8IEVGSV9SRVNFUlZFX1ZHQV9JT19BTElBUywNCi0vLyBFRklfUkVTRVJWRV9JU0FfSU9fTk9fQUxJQVMgfCBFRklfUkVTRVJWRV9WR0FfSU9fTk9fQUxJQVMNCi0vLw0KLSNkZWZpbmUgICAgIEVGSV9SRVNFUlZFX05PTkVfSU9fQUxJQVMgICAgICAgIDB4MDAwMA0KLSNkZWZpbmUgICAgIEVGSV9SRVNFUlZFX0lTQV9JT19BTElBUyAgICAgICAgIDB4MDAwMQ0KLSNkZWZpbmUgICAgIEVGSV9SRVNFUlZFX0lTQV9JT19OT19BTElBUyAgICAgIDB4MDAwMg0KLSNkZWZpbmUgICAgIEVGSV9SRVNFUlZFX1ZHQV9JT19BTElBUyAgICAgICAgIDB4MDAwNA0KLSNkZWZpbmUgICAgIEVGSV9SRVNFUlZFX1ZHQV9JT19OT19BTElBUyAgICAgIDB4MDAwOA0KLQ0KLS8vLw0KLS8vLyBFRklfUENJX0NISVBTRVRfRVhFQ1VUSU9OX1BIQVNFIGlzIHVzZWQgdG8gY2FsbCBhIHBsYXRmb3JtIHByb3RvY29sIGFuZCBleGVjdXRlDQotLy8vIHBsYXRmb3JtLXNwZWNpZmljIGNvZGUuDQotLy8vDQotdHlwZWRlZiBlbnVtIHsNCi0gIC8vLw0KLSAgLy8vIFRoZSBwaGFzZSB0aGF0IGluZGljYXRlcyB0aGUgZW50cnkgcG9pbnQgdG8gdGhlIFBDSSBCdXMgTm90aWZ5IHBoYXNlLiBUaGlzDQotICAvLy8gcGxhdGZvcm0gaG9vayBpcyBjYWxsZWQgYmVmb3JlIHRoZSBQQ0kgYnVzIGRyaXZlciBjYWxscyB0aGUNCi0gIC8vLyBFRklfUENJX0hPU1RfQlJJREdFX1JFU09VUkNFX0FMTE9DQVRJT05fUFJPVE9DT0wgZHJpdmVyLg0KLSAgLy8vDQotICBDaGlwc2V0RW50cnksDQotICAvLy8NCi0gIC8vLyBUaGUgcGhhc2UgdGhhdCBpbmRpY2F0ZXMgdGhlIGV4aXQgcG9pbnQgdG8gdGhlIENoaXBzZXQgTm90aWZ5IHBoYXNlIGJlZm9yZQ0KLSAgLy8vIHJldHVybmluZyB0byB0aGUgUENJIEJ1cyBEcml2ZXIgTm90aWZ5IHBoYXNlLiBUaGlzIHBsYXRmb3JtIGhvb2sgaXMgY2FsbGVkIGFmdGVyDQotICAvLy8gdGhlIFBDSSBidXMgZHJpdmVyIGNhbGxzIHRoZSBFRklfUENJX0hPU1RfQlJJREdFX1JFU09VUkNFX0FMTE9DQVRJT05fUFJPVE9DT0wNCi0gIC8vLyBkcml2ZXIuDQotICAvLy8NCi0gIENoaXBzZXRFeGl0LA0KLSAgTWF4aW11bUNoaXBzZXRQaGFzZQ0KLX0gRUZJX1BDSV9DSElQU0VUX0VYRUNVVElPTl9QSEFTRTsNCi0NCi0NCi0vKioNCi0gIFRoZSBub3RpZmljYXRpb24gZnJvbSB0aGUgUENJIGJ1cyBlbnVtZXJhdG9yIHRvIHRoZSBwbGF0Zm9ybSB0aGF0IGl0IGlzDQotICBhYm91dCB0byBlbnRlciBhIGNlcnRhaW4gcGhhc2UgZHVyaW5nIHRoZSBlbnVtZXJhdGlvbiBwcm9jZXNzLg0KLQ0KLSAgVGhlIFBsYXRmb3JtTm90aWZ5KCkgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gbm90aWZ5IHRoZSBwbGF0Zm9ybSBkcml2ZXIgc28gdGhhdA0KLSAgaXQgY2FuIHBlcmZvcm0gcGxhdGZvcm0tc3BlY2lmaWMgYWN0aW9ucy4gTm8gc3BlY2lmaWMgYWN0aW9ucyBhcmUgcmVxdWlyZWQuDQotICBFaWdodCBub3RpZmljYXRpb24gcG9pbnRzIGFyZSBkZWZpbmVkIGF0IHRoaXMgdGltZS4gTW9yZSBzeW5jaHJvbml6YXRpb24gcG9pbnRzDQotICBtYXkgYmUgYWRkZWQgYXMgcmVxdWlyZWQgaW4gdGhlIGZ1dHVyZS4gVGhlIFBDSSBidXMgZHJpdmVyIGNhbGxzIHRoZSBwbGF0Zm9ybSBkcml2ZXINCi0gIHR3aWNlIGZvciBldmVyeSBQaGFzZS1vbmNlIGJlZm9yZSB0aGUgUENJIEhvc3QgQnJpZGdlIFJlc291cmNlIEFsbG9jYXRpb24gUHJvdG9jb2wNCi0gIGRyaXZlciBpcyBub3RpZmllZCwgYW5kIG9uY2UgYWZ0ZXIgdGhlIFBDSSBIb3N0IEJyaWRnZSBSZXNvdXJjZSBBbGxvY2F0aW9uIFByb3RvY29sDQotICBkcml2ZXIgaGFzIGJlZW4gbm90aWZpZWQuDQotICBUaGlzIG1lbWJlciBmdW5jdGlvbiBtYXkgbm90IHBlcmZvcm0gYW55IGVycm9yIGNoZWNraW5nIG9uIHRoZSBpbnB1dCBwYXJhbWV0ZXJzLiBJdA0KLSAgYWxzbyBkb2VzIG5vdCByZXR1cm4gYW55IGVycm9yIGNvZGVzLiBJZiB0aGlzIG1lbWJlciBmdW5jdGlvbiBkZXRlY3RzIGFueSBlcnJvciBjb25kaXRpb24sDQotICBpdCBuZWVkcyB0byBoYW5kbGUgdGhvc2UgZXJyb3JzIG9uIGl0cyBvd24gYmVjYXVzZSB0aGVyZSBpcyBubyB3YXkgdG8gc3VyZmFjZSBhbnkNCi0gIGVycm9ycyB0byB0aGUgY2FsbGVyLg0KLQ0KLSAgQHBhcmFtICBUaGlzICAgICAgICAgICAgICAgICAgUG9pbnRlciB0byB0aGUgRUZJX1BDSV9QTEFURk9STV9QUk9UT0NPTCBpbnN0YW5jZS4NCi0gIEBwYXJhbSAgSG9zdEJyaWRnZSAgICAgICAgICAgIFRoZSBoYW5kbGUgb2YgdGhlIGhvc3QgYnJpZGdlIGNvbnRyb2xsZXIuDQotICBAcGFyYW0gIFBoYXNlICAgICAgICAgICAgICAgICBUaGUgcGhhc2Ugb2YgdGhlIFBDSSBidXMgZW51bWVyYXRpb24uDQotICBAcGFyYW0gIENoaXBzZXRQaGFzZSAgICAgICAgICBEZWZpbmVzIHRoZSBleGVjdXRpb24gcGhhc2Ugb2YgdGhlIFBDSSBjaGlwc2V0IGRyaXZlci4NCi0NCi0gIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSBmdW5jdGlvbiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5Lg0KLQ0KLSoqLw0KLXR5cGVkZWYNCi1FRklfU1RBVFVTDQotKEVGSUFQSSAqRUZJX1BDSV9QTEFURk9STV9QSEFTRV9OT1RJRlkpKA0KLSAgSU4gIEVGSV9QQ0lfUExBVEZPUk1fUFJPVE9DT0wgICAgICAgICAgICAgICAgICAgICAgKlRoaXMsDQotICBJTiAgRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIb3N0QnJpZGdlLA0KLSAgSU4gIEVGSV9QQ0lfSE9TVF9CUklER0VfUkVTT1VSQ0VfQUxMT0NBVElPTl9QSEFTRSAgUGhhc2UsDQotICBJTiAgRUZJX1BDSV9DSElQU0VUX0VYRUNVVElPTl9QSEFTRSAgICAgICAgICAgICAgICBDaGlwc2V0UGhhc2UNCi0pOw0KLQ0KLQ0KLS8qKg0KLSAgVGhlIG5vdGlmaWNhdGlvbiBmcm9tIHRoZSBQQ0kgYnVzIGVudW1lcmF0b3IgdG8gdGhlIHBsYXRmb3JtIGZvciBlYWNoIFBDSQ0KLSAgY29udHJvbGxlciBhdCBzZXZlcmFsIHByZWRlZmluZWQgcG9pbnRzIGR1cmluZyBQQ0kgY29udHJvbGxlciBpbml0aWFsaXphdGlvbi4NCi0NCi0gIFRoZSBQbGF0Zm9ybVByZXBDb250cm9sbGVyKCkgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gbm90aWZ5IHRoZSBwbGF0Zm9ybSBkcml2ZXIgc28gdGhhdA0KLSAgaXQgY2FuIHBlcmZvcm0gcGxhdGZvcm0tc3BlY2lmaWMgYWN0aW9ucy4gTm8gc3BlY2lmaWMgYWN0aW9ucyBhcmUgcmVxdWlyZWQuDQotICBTZXZlcmFsIG5vdGlmaWNhdGlvbiBwb2ludHMgYXJlIGRlZmluZWQgYXQgdGhpcyB0aW1lLiBNb3JlIHN5bmNocm9uaXphdGlvbiBwb2ludHMgbWF5IGJlDQotICBhZGRlZCBhcyByZXF1aXJlZCBpbiB0aGUgZnV0dXJlLiBUaGUgUENJIGJ1cyBkcml2ZXIgY2FsbHMgdGhlIHBsYXRmb3JtIGRyaXZlciB0d2ljZSBmb3INCi0gIGV2ZXJ5IFBDSSBjb250cm9sbGVyLW9uY2UgYmVmb3JlIHRoZSBQQ0kgSG9zdCBCcmlkZ2UgUmVzb3VyY2UgQWxsb2NhdGlvbiBQcm90b2NvbCBkcml2ZXINCi0gIGlzIG5vdGlmaWVkLCBhbmQgb25jZSBhZnRlciB0aGUgUENJIEhvc3QgQnJpZGdlIFJlc291cmNlIEFsbG9jYXRpb24gUHJvdG9jb2wgZHJpdmVyIGhhcw0KLSAgYmVlbiBub3RpZmllZC4NCi0gIFRoaXMgbWVtYmVyIGZ1bmN0aW9uIG1heSBub3QgcGVyZm9ybSBhbnkgZXJyb3IgY2hlY2tpbmcgb24gdGhlIGlucHV0IHBhcmFtZXRlcnMuIEl0IGFsc28NCi0gIGRvZXMgbm90IHJldHVybiBhbnkgZXJyb3IgY29kZXMuIElmIHRoaXMgbWVtYmVyIGZ1bmN0aW9uIGRldGVjdHMgYW55IGVycm9yIGNvbmRpdGlvbiwgaXQNCi0gIG5lZWRzIHRvIGhhbmRsZSB0aG9zZSBlcnJvcnMgb24gaXRzIG93biBiZWNhdXNlIHRoZXJlIGlzIG5vIHdheSB0byBzdXJmYWNlIGFueSBlcnJvcnMgdG8NCi0gIHRoZSBjYWxsZXIuDQotDQotICBAcGFyYW0gIFRoaXMgICAgICAgICAgICAgICAgICBQb2ludGVyIHRvIHRoZSBFRklfUENJX1BMQVRGT1JNX1BST1RPQ09MIGluc3RhbmNlLg0KLSAgQHBhcmFtICBIb3N0QnJpZGdlICAgICAgICAgICAgVGhlIGFzc29jaWF0ZWQgUENJIGhvc3QgYnJpZGdlIGhhbmRsZS4NCi0gIEBwYXJhbSAgUm9vdEJyaWRnZSAgICAgICAgICAgIFRoZSBhc3NvY2lhdGVkIFBDSSByb290IGJyaWRnZSBoYW5kbGUuDQotICBAcGFyYW0gIFBjaUFkZHJlc3MgICAgICAgICAgICBUaGUgYWRkcmVzcyBvZiB0aGUgUENJIGRldmljZSBvbiB0aGUgUENJIGJ1cy4NCi0gIEBwYXJhbSAgUGhhc2UgICAgICAgICAgICAgICAgIFRoZSBwaGFzZSBvZiB0aGUgUENJIGNvbnRyb2xsZXIgZW51bWVyYXRpb24uDQotICBAcGFyYW0gIENoaXBzZXRQaGFzZSAgICAgICAgICBEZWZpbmVzIHRoZSBleGVjdXRpb24gcGhhc2Ugb2YgdGhlIFBDSSBjaGlwc2V0IGRyaXZlci4NCi0NCi0gIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSBmdW5jdGlvbiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5Lg0KLQ0KLSoqLw0KLXR5cGVkZWYNCi1FRklfU1RBVFVTDQotKEVGSUFQSSAqRUZJX1BDSV9QTEFURk9STV9QUkVQUk9DRVNTX0NPTlRST0xMRVIpKA0KLSAgSU4gIEVGSV9QQ0lfUExBVEZPUk1fUFJPVE9DT0wgICAgICAgICAgICAgICAgICAgICAgKlRoaXMsDQotICBJTiAgRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIb3N0QnJpZGdlLA0KLSAgSU4gIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUm9vdEJyaWRnZSwNCi0gIElOICBFRklfUENJX1JPT1RfQlJJREdFX0lPX1BST1RPQ09MX1BDSV9BRERSRVNTICAgIFBjaUFkZHJlc3MsDQotICBJTiAgRUZJX1BDSV9DT05UUk9MTEVSX1JFU09VUkNFX0FMTE9DQVRJT05fUEhBU0UgICBQaGFzZSwNCi0gIElOICBFRklfUENJX0NISVBTRVRfRVhFQ1VUSU9OX1BIQVNFICAgICAgICAgICAgICAgIENoaXBzZXRQaGFzZQ0KLSk7DQotDQotDQotLyoqDQotICBSZXRyaWV2ZXMgdGhlIHBsYXRmb3JtIHBvbGljeSByZWdhcmRpbmcgZW51bWVyYXRpb24uDQotDQotICBUaGUgR2V0UGxhdGZvcm1Qb2xpY3koKSBmdW5jdGlvbiByZXRyaWV2ZXMgdGhlIHBsYXRmb3JtIHBvbGljeSByZWdhcmRpbmcgUENJDQotICBlbnVtZXJhdGlvbi4gVGhlIFBDSSBidXMgZHJpdmVyIGFuZCB0aGUgUENJIEhvc3QgQnJpZGdlIFJlc291cmNlIEFsbG9jYXRpb24gUHJvdG9jb2wNCi0gIGRyaXZlciBjYW4gY2FsbCB0aGlzIG1lbWJlciBmdW5jdGlvbiB0byByZXRyaWV2ZSB0aGUgcG9saWN5Lg0KLQ0KLSAgQHBhcmFtICBUaGlzICAgICAgICAgICAgICAgICAgUG9pbnRlciB0byB0aGUgRUZJX1BDSV9QTEFURk9STV9QUk9UT0NPTCBpbnN0YW5jZS4NCi0gIEBwYXJhbSAgUGNpUG9saWN5ICAgICAgICAgICAgIFRoZSBwbGF0Zm9ybSBwb2xpY3kgd2l0aCByZXNwZWN0IHRvIFZHQSBhbmQgSVNBIGFsaWFzaW5nLg0KLQ0KLSAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIGZ1bmN0aW9uIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuDQotICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBQY2lQb2xpY3kgaXMgTlVMTC4NCi0NCi0qKi8NCi10eXBlZGVmDQotRUZJX1NUQVRVUw0KLShFRklBUEkgKkVGSV9QQ0lfUExBVEZPUk1fR0VUX1BMQVRGT1JNX1BPTElDWSkoDQotICBJTiAgRUZJX1BDSV9QTEFURk9STV9QUk9UT0NPTCAgICAgICAgICAgKlRoaXMsDQotICBPVVQgRUZJX1BDSV9QTEFURk9STV9QT0xJQ1kgICAgICAgICAgICAgKlBjaVBvbGljeQ0KLSk7DQotDQotDQotLyoqDQotICBHZXRzIHRoZSBQQ0kgZGV2aWNlJ3Mgb3B0aW9uIFJPTSBmcm9tIGEgcGxhdGZvcm0tc3BlY2lmaWMgbG9jYXRpb24uDQotDQotICBUaGUgR2V0UGNpUm9tKCkgZnVuY3Rpb24gZ2V0cyB0aGUgUENJIGRldmljZSdzIG9wdGlvbiBST00gZnJvbSBhIHBsYXRmb3JtLXNwZWNpZmljIGxvY2F0aW9uLg0KLSAgVGhlIG9wdGlvbiBST00gd2lsbCBiZSBsb2FkZWQgaW50byBtZW1vcnkuIFRoaXMgbWVtYmVyIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcmV0dXJuIGFuIGltYWdlDQotICB0aGF0IGlzIHBhY2thZ2VkIGFzIGEgUENJIDIuMiBvcHRpb24gUk9NLiBUaGUgaW1hZ2UgbWF5IGNvbnRhaW4gYm90aCBsZWdhY3kgYW5kIEVGSSBvcHRpb24NCi0gIFJPTXMuIFNlZSB0aGUgVUVGSSAyLjAgU3BlY2lmaWNhdGlvbiBmb3IgZGV0YWlscy4gVGhpcyBtZW1iZXIgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gcmV0dXJuDQotICBvcHRpb24gUk9NIGltYWdlcyBmb3IgZW1iZWRkZWQgY29udHJvbGxlcnMuIE9wdGlvbiBST01zIGZvciBlbWJlZGRlZCBjb250cm9sbGVycyBhcmUgdHlwaWNhbGx5DQotICBzdG9yZWQgaW4gcGxhdGZvcm0tc3BlY2lmaWMgc3RvcmFnZSwgYW5kIHRoaXMgbWVtYmVyIGZ1bmN0aW9uIGNhbiByZXRyaWV2ZSBpdCBmcm9tIHRoYXQgc3RvcmFnZQ0KLSAgYW5kIHJldHVybiBpdCB0byB0aGUgUENJIGJ1cyBkcml2ZXIuIFRoZSBQQ0kgYnVzIGRyaXZlciB3aWxsIGNhbGwgdGhpcyBtZW1iZXIgZnVuY3Rpb24gYmVmb3JlDQotICBzY2FubmluZyB0aGUgUk9NIHRoYXQgaXMgYXR0YWNoZWQgdG8gYW55IGNvbnRyb2xsZXIsIHdoaWNoIGFsbG93cyBhIHBsYXRmb3JtIHRvIHNwZWNpZnkgYSBST00NCi0gIGltYWdlIHRoYXQgaXMgZGlmZmVyZW50IGZyb20gdGhlIFJPTSBpbWFnZSBvbiBhIFBDSSBjYXJkLg0KLQ0KLSAgQHBhcmFtICBUaGlzICAgICAgICAgICAgICAgICAgUG9pbnRlciB0byB0aGUgRUZJX1BDSV9QTEFURk9STV9QUk9UT0NPTCBpbnN0YW5jZS4NCi0gIEBwYXJhbSAgUGNpSGFuZGxlICAgICAgICAgICAgIFRoZSBoYW5kbGUgb2YgdGhlIFBDSSBkZXZpY2UuDQotICBAcGFyYW0gIFJvbUltYWdlICAgICAgICAgICAgICBJZiB0aGUgY2FsbCBzdWNjZWVkcywgdGhlIHBvaW50ZXIgdG8gdGhlIHBvaW50ZXIgdG8gdGhlIG9wdGlvbiBST00gaW1hZ2UuDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdGhlcndpc2UsIHRoaXMgZmllbGQgaXMgdW5kZWZpbmVkLiBUaGUgbWVtb3J5IGZvciBSb21JbWFnZSBpcyBhbGxvY2F0ZWQNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5IEVGSV9QQ0lfUExBVEZPUk1fUFJPVE9DT0wuR2V0UGNpUm9tKCkgdXNpbmcgdGhlIEVGSSBCb290IFNlcnZpY2UgQWxsb2NhdGVQb29sKCkuDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBpcyB0aGUgY2FsbGVyJ3MgcmVzcG9uc2liaWxpdHkgdG8gZnJlZSB0aGUgbWVtb3J5IHVzaW5nIHRoZSBFRkkgQm9vdCBTZXJ2aWNlDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGcmVlUG9vbCgpLCB3aGVuIHRoZSBjYWxsZXIgaXMgZG9uZSB3aXRoIHRoZSBvcHRpb24gUk9NLg0KLSAgQHBhcmFtICBSb21TaXplICAgICAgICAgICAgICAgSWYgdGhlIGNhbGwgc3VjY2VlZHMsIGEgcG9pbnRlciB0byB0aGUgc2l6ZSBvZiB0aGUgb3B0aW9uIFJPTSBzaXplLiBPdGhlcndpc2UsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIGZpZWxkIGlzIHVuZGVmaW5lZC4NCi0NCi0gIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSBvcHRpb24gUk9NIHdhcyBhdmFpbGFibGUgZm9yIHRoaXMgZGV2aWNlIGFuZCBsb2FkZWQgaW50byBtZW1vcnkuDQotICBAcmV0dmFsIEVGSV9OT1RfRk9VTkQgICAgICAgICBObyBvcHRpb24gUk9NIHdhcyBhdmFpbGFibGUgZm9yIHRoaXMgZGV2aWNlLg0KLSAgQHJldHZhbCBFRklfT1VUX09GX1JFU09VUkNFUyAgTm8gbWVtb3J5IHdhcyBhdmFpbGFibGUgdG8gbG9hZCB0aGUgb3B0aW9uIFJPTS4NCi0gIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgIEFuIGVycm9yIG9jY3VycmVkIGluIGdldHRpbmcgdGhlIG9wdGlvbiBST00uDQotDQotKiovDQotdHlwZWRlZg0KLUVGSV9TVEFUVVMNCi0oRUZJQVBJICpFRklfUENJX1BMQVRGT1JNX0dFVF9QQ0lfUk9NKSgNCi0gIElOICAgRUZJX1BDSV9QTEFURk9STV9QUk9UT0NPTCAgICAqVGhpcywNCi0gIElOICAgRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICBQY2lIYW5kbGUsDQotICBPVVQgIFZPSUQgICAgICAgICAgICAgICAgICAgICAgICAgKipSb21JbWFnZSwNCi0gIE9VVCAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAqUm9tU2l6ZQ0KLSk7DQotDQotLy8vDQotLy8vIFRoaXMgcHJvdG9jb2wgcHJvdmlkZXMgdGhlIGludGVyZmFjZSBiZXR3ZWVuIHRoZSBQQ0kgYnVzIGRyaXZlci9QQ0kgSG9zdA0KLS8vLyBCcmlkZ2UgUmVzb3VyY2UgQWxsb2NhdGlvbiBkcml2ZXIgYW5kIGEgcGxhdGZvcm0tc3BlY2lmaWMgZHJpdmVyIHRvIGRlc2NyaWJlDQotLy8vIHRoZSB1bmlxdWUgZmVhdHVyZXMgb2YgYSBwbGF0Zm9ybS4NCi0vLy8NCi1zdHJ1Y3QgX0VGSV9QQ0lfUExBVEZPUk1fUFJPVE9DT0wgew0KLSAgLy8vDQotICAvLy8gVGhlIG5vdGlmaWNhdGlvbiBmcm9tIHRoZSBQQ0kgYnVzIGVudW1lcmF0b3IgdG8gdGhlIHBsYXRmb3JtIHRoYXQgaXQgaXMgYWJvdXQgdG8gDQotICAvLy8gZW50ZXIgYSBjZXJ0YWluIHBoYXNlIGR1cmluZyB0aGUgZW51bWVyYXRpb24gcHJvY2Vzcy4NCi0gIC8vLw0KLSAgRUZJX1BDSV9QTEFURk9STV9QSEFTRV9OT1RJRlkgICAgICAgICAgUGxhdGZvcm1Ob3RpZnk7DQotICAvLy8NCi0gIC8vLyBUaGUgbm90aWZpY2F0aW9uIGZyb20gdGhlIFBDSSBidXMgZW51bWVyYXRvciB0byB0aGUgcGxhdGZvcm0gZm9yIGVhY2ggUENJIA0KLSAgLy8vIGNvbnRyb2xsZXIgYXQgc2V2ZXJhbCBwcmVkZWZpbmVkIHBvaW50cyBkdXJpbmcgUENJIGNvbnRyb2xsZXIgaW5pdGlhbGl6YXRpb24uDQotICAvLy8gDQotICBFRklfUENJX1BMQVRGT1JNX1BSRVBST0NFU1NfQ09OVFJPTExFUiBQbGF0Zm9ybVByZXBDb250cm9sbGVyOw0KLSAgLy8vIA0KLSAgLy8vIFJldHJpZXZlcyB0aGUgcGxhdGZvcm0gcG9saWN5IHJlZ2FyZGluZyBlbnVtZXJhdGlvbi4NCi0gIC8vLw0KLSAgRUZJX1BDSV9QTEFURk9STV9HRVRfUExBVEZPUk1fUE9MSUNZICAgR2V0UGxhdGZvcm1Qb2xpY3k7DQotICAvLy8NCi0gIC8vLyBHZXRzIHRoZSBQQ0kgZGV2aWNlknMgb3B0aW9uIFJPTSBmcm9tIGEgcGxhdGZvcm0tc3BlY2lmaWMgbG9jYXRpb24uDQotICAvLy8NCi0gIEVGSV9QQ0lfUExBVEZPUk1fR0VUX1BDSV9ST00gICAgICAgICAgIEdldFBjaVJvbTsNCi19Ow0KLQ0KLWV4dGVybiBFRklfR1VJRCAgIGdFZmlQY2lQbGF0Zm9ybVByb3RvY29sR3VpZDsNCi0NCi0jZW5kaWYNCmRpZmYgLS1naXQgYS9JbnRlbEZyYW1ld29ya1BrZy9JbnRlbEZyYW1ld29ya1BrZy5kZWMgYi9JbnRlbEZyYW1ld29ya1BrZy9JbnRlbEZyYW1ld29ya1BrZy5kZWMKaW5kZXggMWEwNmZjZS4uYjM0NDhiZCAxMDA2NDQKLS0tIGEvSW50ZWxGcmFtZXdvcmtQa2cvSW50ZWxGcmFtZXdvcmtQa2cuZGVjCisrKyBiL0ludGVsRnJhbWV3b3JrUGtnL0ludGVsRnJhbWV3b3JrUGtnLmRlYwpAQCAtMjYsOSArMjYsNiBAQAogICBTbW1MaWJ8SW5jbHVkZS9MaWJyYXJ5L1NtbUxpYi5oDQogDQogW0d1aWRzXQ0KLSAgIyMgRWRrQ29tcGF0aWJpbGl0eVBrZy9Gb3VuZGF0aW9uL0ZyYW1ld29yay9HdWlkL0FjcGlUYWJsZVN0b3JhZ2UvQWNwaVRhYmxlU3RvcmFnZS5oDQotICBnRWZpQWNwaVRhYmxlU3RvcmFnZUd1aWQgICAgICAgPSB7IDB4N2UzNzRlMjUsIDB4OGUwMSwgMHg0ZmVlLCB7IDB4ODcsIDB4ZjIsIDB4MzksIDB4MGMsIDB4MjMsIDB4YzYsIDB4MDYsIDB4Y2QgfX0NCi0gIA0KICAgIyMgSW5jbHVkZS9HdWlkL0RhdGFIdWJSZWNvcmRzLmgNCiAgIGdFZmlDYWNoZVN1YkNsYXNzR3VpZCAgICAgICAgICA9IHsgMHg3ZjAwMTNhNywgMHhkYzc5LCAweDRiMjIsIHsgMHg4MCwgMHg5OSwgMHgxMSwgMHhmNywgMHg1ZiwgMHhkYywgMHg4MiwgMHg5ZCB9fQ0KICAgDQpAQCAtNjIsMTAgKzU5LDEwIEBACiAgICMjIEluY2x1ZGUvR3VpZC9GaXJtd2FyZUZpbGVTeXN0ZW0uaA0KICAgZ0VmaUZpcm13YXJlRmlsZVN5c3RlbUd1aWQgICAgID0geyAweDdBOTM1NEQ5LCAweDA0NjgsIDB4NDQ0YSwgezB4ODEsIDB4Q0UsIDB4MEIsIDB4RjYsIDB4MTcsIDB4RDgsIDB4OTAsIDB4REYgfX0NCiANCi0gICMjICAgSW5jbHVkZS9HdWlkL0Jsb2NrSW8uaA0KKyAgIyMgSW5jbHVkZS9HdWlkL0Jsb2NrSW8uaA0KICAgZ0VmaVBlaUlkZUJsb2NrSW9QcGlHdWlkICAgICAgID0geyAweDA5NjRlNWIyMiwgMHg2NDU5LCAweDExZDIsIHsgMHg4ZSwgMHgzOSwgMHgwMCwgMHhhMCwgMHhjOSwgMHg2OSwgMHg3MiwgMHgzYiB9fQ0KICAgDQotICAjIyAgSW5jbHVkZS9HdWlkL0Jsb2NrSW8uaA0KKyAgIyMgSW5jbHVkZS9HdWlkL0Jsb2NrSW8uaA0KICAgZ0VmaVBlaTE0NEZsb3BweUJsb2NrSW9QcGlHdWlkID0geyAweGRhNjg1NWJkLCAweDA3YjcsIDB4NGMwNSwgeyAweDllLCAweGQ4LCAweGUyLCAweDU5LCAweGZkLCAweDM2LCAweDBlLCAweDIyIH19DQogICAgIA0KIFtQcm90b2NvbHNdDQpAQCAtOTMsMTAgKzkwLDEwIEBACiAgICMjIEluY2x1ZGUvUHJvdG9jb2wvTGVnYWN5ODI1OS5oDQogICBnRWZpTGVnYWN5ODI1OVByb3RvY29sR3VpZCAgICAgPSB7IDB4MzgzMjFkYmEsIDB4NGZlMCwgMHg0ZTE3LCB7IDB4OGEsIDB4ZWMsIDB4NDEsIDB4MzAsIDB4NTUsIDB4ZWEsIDB4ZWQsIDB4YzEgfX0NCiAgIA0KLSAgIyMgSW5jbHVkZVxQcm90b2NvbFxDcHVJby5oDQorICAjIyBJbmNsdWRlL1Byb3RvY29sL0NwdUlvLmgNCiAgIGdFZmlDcHVJb1Byb3RvY29sR3VpZCAgICAgICAgICA9IHsgMHhCMDczMjUyNiwgMHgzOEM4LCAweDRiNDAsIHsgMHg4OCwgMHg3NywgMHg2MSwgMHhjNywgMHhiMCwgMHg2YSwgMHhhYywgMHg0NSB9fQ0KICAgDQotICAjIyBJbmNsdWRlL1Byb3RvY29sL0NwdUlvLmgNCisgICMjIEluY2x1ZGUvUHJvdG9jb2wvRGF0YUh1Yi5oDQogICBnRWZpRGF0YUh1YlByb3RvY29sR3VpZCAgICAgICAgPSB7IDB4YWU4MGQwMjEsIDB4NjE4ZSwgMHgxMWQ0LCB7IDB4YmMsIDB4ZDcsIDB4MDAsIDB4ODAsIDB4YzcsIDB4M2MsIDB4ODgsIDB4ODEgfX0NCiAgIA0KICAgIyMgSW5jbHVkZS9Qcm90b2NvbC9GaXJtd2FyZVZvbHVtZS5oDQpAQCAtMTA1LDkgKzEwMiw2IEBACiAgICMjIEluY2x1ZGUvUHJvdG9jb2wvU2VjdGlvbkV4dHJhY3Rpb24uaA0KICAgZ0VmaVNlY3Rpb25FeHRyYWN0aW9uUHJvdG9jb2xHdWlkID0geyAweDQ0OEY1REE0LCAweDZERDcsIDB4NEZFMSwgeyAweDkzLCAweDA3LCAweDY5LCAweDIyLCAweDQxLCAweDkyLCAweDIxLCAweDVEIH19DQogICANCi0gICMjIEluY2x1ZGUvUHJvdG9jb2wvUGNpSG90UGx1Z0luaXQuaA0KLSAgZ0VmaVBjaUhvdFBsdWdJbml0UHJvdG9jb2xHdWlkID0geyAweGFhMGU4YmMxLCAweGRhYmMsIDB4NDZiMCwgeyAweGE4LCAweDQ0LCAweDM3LCAweGI4LCAweDE2LCAweDliLCAweDJiLCAweGVhIH19DQotICANCiAgICMjIEluY2x1ZGUvUHJvdG9jb2wvRnJhbWV3b3JrSGlpLmgNCiAgIGdFZmlIaWlQcm90b2NvbEd1aWQgICAgICAgICAgICA9IHsgMHhkN2FkNjM2ZSwgMHhiOTk3LCAweDQ1OWIsIHsgMHhiZiwgMHgzZiwgMHg4OCwgMHg0NiwgMHg4OSwgMHg3OSwgMHg4MCwgMHhlMSB9fQ0KICAgDQpAQCAtMTE3LDE4ICsxMTEsNiBAQAogICAjIyBJbmNsdWRlL1Byb3RvY29sL0ZyYW1ld29ya01wU2VydmljZS5oIA0KICAgZ0ZyYW1ld29ya0VmaU1wU2VydmljZVByb3RvY29sR3VpZCA9IHsgMHhmMzMyNjFlNywgMHgyM2NiLCAweDExZDUsIHsweGJkLCAweDVjLCAweDAsIDB4ODAsIDB4YzcsIDB4M2MsIDB4ODgsIDB4ODF9fQ0KICAgDQotICAjIyBJbmNsdWRlL1Byb3RvY29sL0lkZUNvbnRyb2xsZXJJbml0LmgNCi0gIGdFZmlJZGVDb250cm9sbGVySW5pdFByb3RvY29sR3VpZCA9IHsgMHhhMWUzNzA1MiwgMHg4MGQ5LCAweDRlNjUsIHsgMHhhMywgMHgxNywgMHgzZSwgMHg5YSwgMHg1NSwgMHhjNCwgMHgzZSwgMHhjOSB9fQ0KLSAgDQotICAjIyBJbmNsdWRlL1Byb3RvY29sL1BjaUhvc3RCcmlkZ2VSZXNvdXJjZUFsbG9jYXRpb24uaA0KLSAgZ0VmaVBjaUhvc3RCcmlkZ2VSZXNvdXJjZUFsbG9jYXRpb25Qcm90b2NvbEd1aWQgPSB7IDB4Q0Y4MDM0QkUsIDB4Njc2OCwgMHg0ZDhiLCB7IDB4YjcsIDB4MzksIDB4N2MsIDB4Y2UsIDB4NjgsIDB4M2EsIDB4OWYsIDB4YmUgfX0NCi0gIA0KLSAgIyMgSW5jbHVkZS9Qcm90b2NvbC9QY2lQbGF0Zm9ybS5oDQotICBnRWZpUGNpUGxhdGZvcm1Qcm90b2NvbEd1aWQgICAgPSB7IDB4MDdkNzUyODAsIDB4MjdkNCwgMHg0ZDY5LCB7IDB4OTAsIDB4ZDAsIDB4NTYsIDB4NDMsIDB4ZTIsIDB4MzgsIDB4YjMsIDB4NDEgfX0NCi0gIA0KLSAgIyMgSW5jbHVkZS9Qcm90b2NvbC9JbmNvbXBhdGlibGVQY2lEZXZpY2VTdXBwb3J0LmgNCi0gIGdFZmlJbmNvbXBhdGlibGVQY2lEZXZpY2VTdXBwb3J0UHJvdG9jb2xHdWlkID0geyAweGViMjNmNTVhLCAweDc4NjMsIDB4NGFjMiwgeyAweDhkLCAweDNkLCAweDk1LCAweDY1LCAweDM1LCAweGRlLCAweDAzLCAweDc1IH19DQotICANCiAgICMjIEluY2x1ZGUvUHJvdG9jb2wvU21tQmFzZS5oDQogICBnRWZpU21tQmFzZVByb3RvY29sR3VpZCAgICAgICAgPSB7IDB4MTM5MDk1NEQsIDB4ZGE5NSwgMHg0MjI3LCB7IDB4OTMsIDB4MjgsIDB4NzIsIDB4ODIsIDB4YzIsIDB4MTcsIDB4ZGEsIDB4YTggfX0NCiAgIA0K