LyoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiCpIDIwMTMgTWljcm9jaGlwIFRlY2hub2xvZ3kgSW5jLiBhbmQgaXRzIHN1YnNpZGlhcmllcy4KKiBZb3UgbWF5IHVzZSB0aGlzIHNvZnR3YXJlIGFuZCBhbnkgZGVyaXZhdGl2ZXMgZXhjbHVzaXZlbHkgd2l0aAoqIE1pY3JvY2hpcCBwcm9kdWN0cy4KKiBUSElTIFNPRlRXQVJFIElTIFNVUFBMSUVEIEJZIE1JQ1JPQ0hJUCAiQVMgSVMiLgoqIE5PIFdBUlJBTlRJRVMsIFdIRVRIRVIgRVhQUkVTUywgSU1QTElFRCBPUiBTVEFUVVRPUlksIEFQUExZIFRPIFRISVMgU09GVFdBUkUsCiogSU5DTFVESU5HIEFOWSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLAoqIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IgSVRTIElOVEVSQUNUSU9OIFdJVEggTUlDUk9DSElQCiogUFJPRFVDVFMsIENPTUJJTkFUSU9OIFdJVEggQU5ZIE9USEVSIFBST0RVQ1RTLCBPUiBVU0UgSU4gQU5ZIEFQUExJQ0FUSU9OLgoqIElOIE5PIEVWRU5UIFdJTEwgTUlDUk9DSElQIEJFIExJQUJMRSBGT1IgQU5ZIElORElSRUNULCBTUEVDSUFMLCBQVU5JVElWRSwKKiBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgTE9TUywgREFNQUdFLCBDT1NUIE9SIEVYUEVOU0UgT0YgQU5ZIEtJTkQKKiBXSEFUU09FVkVSIFJFTEFURUQgVE8gVEhFIFNPRlRXQVJFLCBIT1dFVkVSIENBVVNFRCwgRVZFTiBJRiBNSUNST0NISVAgSEFTCiogQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPUiBUSEUgREFNQUdFUyBBUkUgRk9SRVNFRUFCTEUuCiogVE8gVEhFIEZVTExFU1QgRVhURU5UIEFMTE9XRUQgQlkgTEFXLCBNSUNST0NISVAnUyBUT1RBTCBMSUFCSUxJVFkgT04gQUxMCiogQ0xBSU1TIElOIEFOWSBXQVkgUkVMQVRFRCBUTyBUSElTIFNPRlRXQVJFIFdJTEwgTk9UIEVYQ0VFRCBUSEUgQU1PVU5UIE9GCiogRkVFUywgSUYgQU5ZLCBUSEFUIFlPVSBIQVZFIFBBSUQgRElSRUNUTFkgVE8gTUlDUk9DSElQIEZPUiBUSElTIFNPRlRXQVJFLgoqIE1JQ1JPQ0hJUCBQUk9WSURFUyBUSElTIFNPRlRXQVJFIENPTkRJVElPTkFMTFkgVVBPTiBZT1VSIEFDQ0VQVEFOQ0UKKiBPRiBUSEVTRSBURVJNUy4KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogIGNvbW1vbi5oCiAqICAgICAgVGhpcyBpcyB0aGUgaGVhZGVyIGZpbGUgaW5jbHVkaW5nIGNvbW1vbiBoZWFkZXJzIGZyb20gdmFyaW91cyBtb2R1bGVzCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqICAkUmV2aXNpb246ICMxICQgICREYXRlVGltZTogMjAxNi8wNC8wOCAxMDoxODoyOCAkICAkICAgICQKICogIERlc2NyaXB0aW9uOiBhZGRlZCBpY3QgbW9kdWxlCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqICAjeHgKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogJEZpbGU6IC8vZGVwb3RfcGNzL0ZXRW5nL1JlbGVhc2UvcHJvamVjdHMvQ0VDMTMwMl9QTElCX0NMSUIvcmVsZWFzZTUvU291cmNlL2h3X2Jsa3MvY29tbW9uL2luY2x1ZGUvY29tbW9uLmggJAogKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qKiBAZGVmZ3JvdXAgY29tbW9uIGNvbW1vbgogKiAgQHsKICovCgovKiogQGZpbGUgY29tbW9uLmgKKiBcYnJpZWYgaGVhZGVyIGZpbGUgaW5jbHVkaW5nIGNvbW1vbiBoZWFkZXJzIGZyb20gdmFyaW91cyBtb2R1bGVzCiogXGF1dGhvciBBcHAgRmlybXdhcmUgVGVhbQoqIAoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwojaWZuZGVmIF9DT01NT05fSF8KI2RlZmluZSBfQ09NTU9OX0hfCgovLyBJbmNsdWRlIGNvbW1vbiBoZWFkZXJzIGZyb20gdmFyaW91cyBtb2R1bGVzCi8vICEhISBUaGUgaW5jbHVkZSBvcmRlciBpcyBpbXBvcnRhbnQgISEhCiNpbmNsdWRlICJjZmcuaCIKI2luY2x1ZGUgInBsYXRmb3JtLmgiCiNpbmNsdWRlICJNQ0hQX0NFQzEzMDIuaCIKI2luY2x1ZGUgIkFSTV9SRUcuaCIKLyogQ29ydGV4LU00IHByb2Nlc3NvciBhbmQgY29yZSBwZXJpcGhlcmFscyAqLwojaW5jbHVkZSAiY29yZV9jbTQuaCIgCgojaW5jbHVkZSAiZGVmcy5oIgojaW5jbHVkZSAic3RyaW5nLmgiCgojaW5jbHVkZSAia2VybmVsLmgiCiNpbmNsdWRlICIuLlxzeXN0ZW1cc3lzdGVtLmgiCiNpbmNsdWRlICIuLlxkZWJ1Z1x0cmFjZS5oIgojaW5jbHVkZSAiLi5caW50ZXJydXB0XGlycWhhbmRsZXIuaCIKI2luY2x1ZGUgIi4uXHRpbWVyXHRpbWVyX2FwcC5oIgoKI2luY2x1ZGUgImNlYzEzMDJfY3J5cHRvX2FwaS5oIgoKI2VuZGlmIC8qX0NPTU1PTl9IXyovCgovKiogICBAfQogKi8KCgo=